使用 IN() 时主索引是否不起作用?

Does primary index not work when using IN()?

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,它不应该只获取这些项目吗?

如何优化此查询?

MySQL 在优化此类查询方面出了名的差。它不是选择子查询中的少量值并使用它们索引到主 table,而是遍历主查询中的所有行并使用它们索引到子查询中的 table .

如果使用 JOIN:

会更好
SELECT DISTINCT i.id
FROM itable i
JOIN ijoin j ON i.id = j.itable_id
WHERE j.user_id = '1'