MySql如何使用如何使用not in实现优化实现优化
最近项目上用select查询时使用到了not in来排除用不到的主键id一开始使用的sql如下:
select
s.SORT_ID,
s.SORT_NAME,
s.SORT_STATUS,
s.SORT_LOGO_URL,
s.SORT_LOGO_URL_LIGHT
from SYS_SORT_PROMOTE s
WHERE
s.SORT_NAME = '必听经典'
AND s.SORT_ID NOT IN ("SORTID001")
limit 1;
表中的数据较多时这个sql的执行时间较长、执行效率低,在网上找资料说可以用 left join进行优化,优化后的sql如下:
select
s.SORT_ID,
s.SORT_NAME,
s.SORT_STATUS,
s.SORT_LOGO_URL,
s.SORT_LOGO_URL_LIGHT
from SYS_SORT_PROMOTE s
left join (select SORT_ID from SYS_SORT_PROMOTE where SORT_ID=#{sortId}) b
on s.SORT_ID = b.SORT_ID
WHERE
b.SORT_ID IS NULL
AND s.SORT_NAME = '必听经典'
limit 1;
上述SORT_ID=#{sortId} 中的sortId传入SORT_ID这个字段需要排除的Id值,左外连接时以需要筛选的字段(SORT_ID)作为
连接条件,最后在where条件中加上b.SORT_ID IS NULL来将表中的相关数据筛选掉就可以了。
这里写下随笔,记录下优化过程。
您可能感兴趣的文章您可能感兴趣的文章:MySQL中NOT IN填坑之列为null的问题解决解决大于5.7版本mysql的分组报错Expression #1 of
SELECT list is not in GROUP BY clause and contains nonaggregatedMysql:The user specified as a definer (”xxx@”%”)
does not exist的解决方案MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法解决MySQL5.1安
装时出现Cannot create windows service for mysql.error:0MySQL中对于not in和minus使用的优化MySQL 启动报错:File
./mysql-bin.index not found (Errcode: 13)MySQL: mysql is not running but lock exists 的解决方法
评论0
最新资源