在sqlserver中创建索引时,列的顺序如何



我创建了一个表EMP(名称varchar(10(,地址varchar(0((和两列上的两个索引,唯一的区别是列的顺序是更改。Index1(name,address(和index2。

现在第二件事-我删除了这个表,重新创建了同一个表,只是不同之处在于,我首先创建了index2,然后按照上面的相同顺序创建了index1,并从case1开始执行相同的过程,这次它使用了index1

问题是-在这种情况下,过滤器的顺序无关紧要吗?它总是将索引考虑在内,最终创建了索引,我的理解是它从右到左读取执行,但这里不是这样吗?

对于您的特定查询,可以使用任一索引。SQL Server任意地选择其中一个--我不认为存在对其中一个的偏好。

另一方面,如果您有这样的查询:

where name = ? and address like 'A%'

则最佳指标为CCD_ 1。

或者像这样:

where address = ? and name like 'A%'

则最佳指标为CCD_ 2。

WHERE中的比较顺序与索引使用无关(除非基于优化器中等效索引的排序存在一些无意义的影响(。

最新更新