sql-server - SQL Server 上多列查询的多列索引优化

标签 sql-server indexing

我有一个表 [table],其中有两列需要过滤:[column1] 和 [column2]。

在我的程序中,我执行如下查询:

select * from [table] where [column1] = 'foo' and [column2] = 'bar';

哪个更快:

  1. 创建两个索引,每列一个。 ([第 1 列] 和 [第 2 列])
  2. 创建一个包含两列的索引。 ([列1]+[列2])

这个问题困扰了我一段时间,我不知道查询优化是如何工作的,也不知道SQL Server如何使用创建的索引来加速查询。

最佳答案

对于此查询,第二个总是更快 - 但您需要将更具选择性的查询放在第一位(按索引顺序)以获得更多好处。唯一的异常(exception)是,如果出于性能原因,SQL 决定使用聚集索引,因此会忽略非聚集索引。

两个值的组合创建了更具选择性的标准。它还有助于提高性能,因为没有 BOOKMARK LOOKUP覆盖索引所需。

书签查找是主要性能下降的根源,这就是为什么覆盖索引总是优于 2 个索引的原因。

更新

请记住,如果您的索引为column1+column2,则仅对column2进行搜索无法使用此索引,因此您还需要在column2上有一个单独的索引。

关于sql-server - SQL Server 上多列查询的多列索引优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194208/

相关文章:

sql - 如何将日期时间转换为仅日期(时间设置为 00 :00:00. 000)

sql-server - SQL Server 如何合并两个数据库?

SQL SERVER 2005 USE 语句

tomcat - 如何在 webapp 部署时创建 Lucene 内存索引

sorting - lucene.net,文档提升不起作用

sql-server - 证书链由不受信任的机构颁发

sql-server - 哪个版本的SQL Server支持.Net framework 4.5?

R:将列表组件的值连接到另一个定义哪些组件在一起的列表

python - 如何在 PyOpenCL 中覆盖数组元素

postgresql - 如何确定在 Postgres 中使用什么类型的索引?