mysql查询优化not in,mysql not in如何优化

mysql not in如何优化

eaac03a7d7e0f96ead91f17d5ff6ac19.png

,你现在写的这个sql是查询到你描述的结果的

c表(xl_account),没看明白是么的的,先不管

a,b 两表通过id进行关联,应该是可以认为id相同则是同一(人)条记录

name不同应可以认为是做了修改,你用not in 则说明是不存在。假如,有2行记录,将名称互换,应该是两行都修改了,但是按照你现在的sql来看是应属于in的范围,not in 无法显示的,也就是查不出来。

所以,首先not in 改为 不等(!=), 才应该是你要找的数据。这样效率也是有所提高的。

若想要找到哪条记录修改,且要查询改前和改后的值,那么没有什么修改空间了,如果要查出哪条修改过,则有select * from kd_user a

where  not exists (

select 1 from lx_user b where a.id=b.id and a.name=b.name

)

sql语句求优化,听说NOT IN 语句不好求优化

9e447c91efdafdf8870bda15991fedac.png

可以考虑not exists或minus(except)--not exists

SELECT name FROM test1 a

WHERE NOT EXISTS (SELECT 1 FROM test2 b WHERE a.NAME=b.NAME and b.NAME<>'admin')

--minus

SELECT name FROM test1 a

minus

SELECT DISTINCT NAME FROM test2 WHERE NAME<>'admin'

效率方面,一般来not exists和minus要比not in强很多,但是具体情况具析。

可以参考:

通过一个例子,对比几种方法的效率

sql中的not in怎么优化

fc10bb9d0f071c4667634d402810020c.png

非到迫不得已不要用,因为not in 不走索引

相关标签推荐:

延展阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值