MySQL WHERE 不是非常慢

标签 mysql sql query-optimization

下面是存储过程中的 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/

相关文章:

postgresql - 当我第二次使用完全相同的参数调用 IMMUTABLE 函数时,为什么计划时间会加倍?

sql - 交换 ms-sql 表

sql - 将它们之间的类型和纯函数(使用类似 ML 或类似 Haskell 的语言)编译为 SQL

php - 查询从 postman 和 phpmyadmin 运行,但不是从 android 运行

mysql - IBM Cloud - Compose for MySQL - 更改 sql_mode - 以启用 GROUP BY 查询

mysql - 删除与依赖表没有任何链接的所有行

mysql - 查询中同时使用 group by 和 order by 时避免创建临时表

mysql - SQL 多个 CASE WHEN 具有相同的 Count 函数

php - 如何启动 PHP?

php - 显示 MySQL 数据库中与 ID 相关的单个条目