0

所以我有一个非常奇怪的问题,如果我运行这样的查询:

SELECT * 
FROM tbl_x 
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6')

该查询使用表上的索引,但是如果我查询这个:

SELECT * 
FROM tbl_x 
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6','7')

查询忽略索引并决定进行表扫描

当 Where 子句中的值超过 6 个时,为什么 MS SQL Server 不使用索引?

4

1 回答 1

0

我猜基于数据分布和基数查询优化器决定使用全表扫描,因为它比使用索引便宜。

你可以检查:

SELECT COUNT(*)
FROM tbl_x;

SELECT COUNT(*)
FROM tbl_x
WHERE tbl_x.SomeCode IN ('1','2','3','4','5','6','7');

可能您超过了整个表的 20% 行。

于 2017-11-17T16:35:11.810 回答