mysql - SQL IN 语句缓慢

标签 mysql sql

我在使用 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/

相关文章:

mysql - LEFT JOIN 即使空 SQL

java - 无法使用 OJDBC 和 Oracle DB 执行 SQL 查询(但可以完全使用 postgres JDBC 和 Postgres DB)

java - MyBatis 执行获取并基于返回值在 Xxxmapper.xml 中执行更新/插入?

mysql - 如何在mysql EAV模型中实现数据过滤

mysql - 在sql中跨多个列插入单个值

mysql - CakePHP 1.3 未保存到数据库,但 sql 语句正确且 insertID 正确增加

mysql - 选择多个相似行

MySQL 存储过程,永远不会引发错误?

sql - 计算 nVarchar 的值

MySql 从表格游戏中找到玩家 X 的 friend