日期:2014-05-17  浏览次数:20489 次

为什么sql中IN 会遍历全表
为什么sql中IN会遍历全表

------解决方案--------------------
#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可以带来好处时,照样会走索引的。
------解决方案--------------------
你从100个人中找1个人和你从10000个人中找1个,当你找到第80个人是你想要找的人后,你会继续找下去吗?
如果说要扫描全表,那就得继续找下去了。