MySQL:使用 OR 子句连接会变慢



我有一个简单的MySQL InnoDB数据库,有两个表:usersdialogues。我正在尝试进行 LEFT JOIN 查询,但是,我遇到了性能问题。

当我执行以下语句时,

EXPLAIN SELECT u.id FROM users u
LEFT JOIN dialogues d ON u.id = d.creator_id

我得到的响应是DB使用SELECT类型indexref,这完全没问题。

但是,当我添加一个附加条款时:

EXPLAIN SELECT u.id FROM users u
LEFT JOIN dialogues d ON (u.id = d.creator_id OR u.id = d.target_id)

突然,数据库指示它在 JOIN 时使用 SELECT 类型all这反过来又使实际查询速度变慢了数倍。

是否可以在第二个示例中使用更有效的 SELECT 类型来使数据库使用更有效的 SELECT 类型?d.creator_idd.target_id列具有连接到u.id的外键。

select中执行两个left joincoalesce()通常更快:

SELECT d.*,
COALESCE(uc.name, ut.name) as name
FROM dialogues d LEFT JOIN
users uc 
ON uc.id = d.creator_id LEFT JOIN
users ut
ON ut.id = d.target_id

最新更新