当前位置:首页 » 编程语言 » sqlserverin效率

sqlserverin效率

发布时间: 2023-06-12 15:09:35

sqlServer中in和exists的区别效率问题

in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表梁或进行查询。

如果两个表中一个较小,一个是大表悄渣神,则子查询表大的用exists,子查启亏询表小的用in:
例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的2:select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

in 与 =的区别
select name from student where name in ('zhang','wang','li','zhao');与
select name from student where name='zhang' or name='li' or
name='wang' or name='zhao'
的结果是相同的。

Ⅱ sqlserver 多表 <> not in 哪个速度快

首先说明,in的效率就不高,not的效率更底,所以二者结合就效率不高了。
至于为什么,从大了说,in和not都跟索引没有关系,而且就算相关字段有索引二者也都不会走,走的都是全表查询,那么这肯定不会快。
再说语句本身,not in 首先要判断是不是in,然后在判断not,这是两个过程,相当于一个补集,等于判断了两次,那么自然也就会慢一些。
其实凡是涉及到否判断的都有这样的问题。所以个人一般不建议使用否判断的条件,就算需要有,也需要尽量简化查询内容以后使用(举个简单的例子,原来你的not in需要在1千条数据中查找,现在在10条数据中查找,自然是后者快一些),这样才能让查询更加快捷。

热点内容
如何在安卓上让苹果耳机弹窗 发布:2025-02-13 11:38:13 浏览:191
搭建自己的服务器直播间 发布:2025-02-13 11:27:34 浏览:986
酷狗音乐试听缓存删了会怎样 发布:2025-02-13 11:02:12 浏览:267
python游戏服务端 发布:2025-02-13 11:00:19 浏览:927
云原生服务器 发布:2025-02-13 10:55:34 浏览:827
linuxip命令查看ip 发布:2025-02-13 10:49:45 浏览:421
java基础应用 发布:2025-02-13 10:44:53 浏览:711
linux内核抢占 发布:2025-02-13 10:36:32 浏览:890
家装公司源码 发布:2025-02-13 10:35:35 浏览:49
aspnet更新数据库 发布:2025-02-13 10:35:34 浏览:385