SELECT
i.id
FROM
itable i
WHERE
i.id IN (
SELECT
itable_id j
FROM
ijoin j
WHERE
j.user_id = '1'
)
此查询检查itable的每一行,大约300万行。
由于i.id是主键,因此它不应该仅获取那些项吗?
如何优化此查询?
最佳答案
众所周知,MySQL在优化此类查询方面很差。而不是在子查询中选择少量的值并使用它们索引到主表中,而是迭代遍历主查询中的所有行,并使用它们在子查询中索引到表中。
如果使用JOIN
会更好:
SELECT DISTINCT i.id
FROM itable i
JOIN ijoin j ON i.id = j.itable_id
WHERE j.user_id = '1'
关于mysql - 使用IN()时主索引不起作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29479869/