下面是存储过程中的 SQL 语句(为简洁起见被截断):
SELECT *
FROM item a
WHERE a.orderId NOT IN (SELECT orderId FROM table_excluded_item);
此语句需要 30 秒左右!但是如果我删除内部 SELECT 查询,它会下降到 1s。 table_excluded_item
并不大,但我怀疑内部查询的执行次数超出了需要。
有没有更有效的方法?
最佳答案
使用 LEFT JOIN
SELECT a.*
FROM item a
LEFT JOIN table_excluded_item b
ON a.orderId = b.orderId
WHERE b.orderId IS NULL
确保两个表中的 orderId
均已编入索引。
关于MySQL WHERE 不是非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14167793/