如何解决在 sql server 中创建索引时,列顺序如何重要?
我在两列上创建了一个表 EMP(名称 varchar(10),address varchar(10))和两个索引,唯一的区别是列的顺序发生了变化。 Index1(name,address) 和 index2(adress,name) 并且我从 emp 中运行 select * where name='' and address='' 并且它利用了 index2 这很明显然后我刷新了缓存(甚至重新启动了我的 sql 服务)更改顺序为 select * from emp where address='' and name='' 这次我认为将使用 index1 但它使用相同的索引 index2。
现在第二件事 - 我删除了这个表并重新创建了同一个表,不同之处在于我首先创建了 index2 然后按照上面相同的顺序创建了 index1 并从 case1 执行了相同的过程,这次它使用了 index1
问题是 - 在这种情况下,过滤器的顺序是否无关紧要?它总是考虑到最后创建的索引,我的理解是它从右到左读取执行,但这里不是这种情况?
解决方法
对于您的特定查询,可以使用任一索引。 SQL Server 任意选择其中之一——我认为两者之间没有任何偏好。
另一方面,如果您有这样的查询:
where name = ? and address like 'A%'
那么最好的索引是(name,address)
。
或者像这样:
where address = ? and name like 'A%'
那么最好的索引是(address,name)
。
WHERE
中的比较顺序与索引使用无关(除非基于优化器中等效索引的顺序存在一些无意义的影响)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。