首页 文章

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

提问于
浏览
2

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

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

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

哪个更快:

  • 创建两个索引,每列一个 . ([column1]和[column2])

  • 创建一个包含两列的索引 . ([column1] [column2])

这个问题一直困扰着我,我不知道查询优化是如何工作的以及SQL Server如何使用创建的索引来加速查询 .

2 回答

  • 3

    对于此查询,第二个更快 ALWAYS - 但您需要将更具选择性的一个(按索引的顺序)更多地受益 . 唯一的例外是,出于性能原因,SQL决定使用聚簇索引,因此忽略非聚簇索引 .

    两个值的组合创建了更具选择性的标准 . 此外,它还有助于提高性能,因为覆盖索引上不需要BOOKMARK LOOKUP .

    书签查找是主要性能下降的原因,这就是覆盖索引始终优于2个索引的原因 .

    UPDATE

    请记住,如果您的索引为column1 coulmn2,则仅对column2的搜索不能使用此索引,因此您还需要在column2上使用单独的索引 .

  • 3

    这取决于!

    这取决于这些列的选择性 .

    如果您选择了所有列'*',则可以使用非常快速的覆盖索引,该索引由where子句列和INCLUDE组成SELECT列表中的列组成 .

相关问题