假设我有以下问题:
SELECT outercol,
t.innercol
FROM outertable INNER JOIN
(SELECT id2,
innercol
FROM innertable
WHERE id2 IN ('1', '4')) AS t ON t.id2 = outertable.id
id和id2都是主键。 因此,它们被编入索引。
我读到有人说用IN很慢。 让我们假设它是。 所以,我将它转换为:
SELECT outercol,
t.innercol
FROM outertable INNER JOIN
(SELECT id2,
innercol
FROM innertable
WHERE id2 = '1'
UNION
SELECT id2,
innercol
FROM innertable
WHERE id2 = '4') AS t ON t.id2 = outertable.id
我的问题是:使用这个联合会不会使引擎不使用t.id2=outertable.id部分的索引?
只需注意您的第一个查询在功能上与:
SELECT o.outercol
, i.innercol
FROM outertable o
JOIN innertable i
ON i.id2 = o.id
WHERE i.id2 IN (1,4)