当前位置:首页 » 编程语言 » 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-05-16 00:00:20 浏览:328
连接聚类算法 发布:2025-05-15 23:55:09 浏览:977
工资算法单休 发布:2025-05-15 23:52:30 浏览:818
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:531
win7取消加密 发布:2025-05-15 23:26:37 浏览:471
不用internet打开ftp 发布:2025-05-15 23:06:00 浏览:153
sql字符串取数字 发布:2025-05-15 22:57:45 浏览:124
推荐编程课 发布:2025-05-15 22:34:12 浏览:618
表拒绝访问 发布:2025-05-15 22:29:37 浏览:978
电脑怎样解压文件 发布:2025-05-15 22:25:32 浏览:439