微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 sql server 中创建索引时,列顺序如何重要?

如何解决在 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 举报,一经查实,本站将立刻删除。