为什么sql中IN 会遍历全表

CPlusPlusLove 2013-08-22 05:19:43
为什么sql中IN会遍历全表
...全文
675 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
你从100个人中找1个人和你从10000个人中找1个,当你找到第80个人是你想要找的人后,你会继续找下去吗? 如果说要扫描全表,那就得继续找下去了。
CPlusPlusLove 2013-08-22
  • 打赏
  • 举报
回复
引用 3 楼 wwwwgou 的回复:
#1.IN的语法相当于多个OR的串连 #2.但不一定不起索引哦。示例,下面的两个语句,测试会走索引,且为INDEX SEEK SELECT * FROM dbo.tab WHERE name IN ('2555','29999') SELECT * FROM dbo.tab WHERE name = '2555' OR name = '29999' #3.一般情况下,当你IN中的条件太多,或是无法估计时,优化器倾向于全表扫描。当IN的条件少时,如果优化器认为,INDEX SEEK可以带来好处时,照样会走索引的。
明白了,如果IN的条件比较少时还是会检索索引,IN条件比较多时就全表扫描
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
谁说in会遍历的?
同感,支持一下~
發糞塗牆 2013-08-22
  • 打赏
  • 举报
回复
谁说in会遍历的?
Shawn 2013-08-22
  • 打赏
  • 举报
回复
#1.IN的语法相当于多个OR的串连 #2.但不一定不起索引哦。示例,下面的两个语句,测试会走索引,且为INDEX SEEK SELECT * FROM dbo.tab WHERE name IN ('2555','29999') SELECT * FROM dbo.tab WHERE name = '2555' OR name = '29999' #3.一般情况下,当你IN中的条件太多,或是无法估计时,优化器倾向于全表扫描。当IN的条件少时,如果优化器认为,INDEX SEEK可以带来好处时,照样会走索引的。
唐诗三百首 2013-08-22
  • 打赏
  • 举报
回复
因为没有索引,只能全表找一次咯..
Andy__Huang 2013-08-22
  • 打赏
  • 举报
回复
不一定,查询到符合条件后就返回。 尽量不要用IN函数,用关联查询比用IN要快很多

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧