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是PRIMARY KEY,它不应该仅仅获取这些项吗?
如何优化此查询?
答案 0 :(得分:2)
MySQL在优化此类查询方面非常糟糕。它不是在子查询中选择少量值并使用它们索引到主表中,而是迭代主查询中的所有行,并使用它们索引到子查询中的表。
如果您使用JOIN
:
SELECT DISTINCT i.id
FROM itable i
JOIN ijoin j ON i.id = j.itable_id
WHERE j.user_id = '1'