提问者:小点点

UNION的使用会使索引变得无用吗?


假设我有以下问题:

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部分的索引?


共1个答案

匿名用户

只需注意您的第一个查询在功能上与:

SELECT o.outercol
     , i.innercol
  FROM outertable o 
  JOIN innertable i
    ON i.id2 = o.id
 WHERE i.id2 IN (1,4)