我在使用 IN 语句让我的 SQL 高效运行时遇到了一些问题。如果我分别运行这两个语句,并手动粘贴一系列结果(在本例中有 30 个 vendor_id),vendor_master 查询会立即运行,而 invoices 查询会在大约 2 秒内运行。
select * FROM invoices where vendor_id IN
(
select vendor_id from vendor_master WHERE vendor_master_id = 12345
);
那么是什么导致了巨大的减速,超过 60 秒并且经常超时?有没有办法将结果放在带逗号的变量中?还是让内部语句先执行?
最佳答案
在 MySQL 5.6.6 之前,in
的优化效率很低。使用 exists
代替:
select *
FROM invoices i
where exists (select 1
from vendor_master vm
where i.vendor_id = vm.vendor_id and vm.vendor_master_id = 12345
);
为了获得最佳性能,您需要在 vendor_master(vendor_id, vendor_master_id)
上建立索引。
关于mysql - SQL IN 语句缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635099/