4

当我读到这本书时,

我发现我可以创建一个具有 where 条件的索引。

我发现我们可以像这样创建索引

  Create index `<index_name>` on `<table_name>`

或者

  Create index `<index_name>` on `<table_name>` Where (`<Conditions>`)

但是不知道有什么好处?

What are the benefits of a filtered index?

哪些列最常用Where conditions

4

2 回答 2

5

这样做的明显原因是使索引更具选择性,或者使用它来应用约束:

Create unique index IX_Contacts on Contacts(User_ID) Where (IsDefault=1)

说,对于每个User_ID,他们可能在表中只有一个默认联系人Contacts- 但他们可以拥有尽可能多的非默认联系人,因为系统中的其他约束允许他们创建。

类似地,尝试为用户定位默认联系人的查询更有可能使用此索引,因为它非常狭窄和选择性 - 如果只有 10% 的联系人是用户的默认联系人,那么此索引将小得多比上的索引(User_ID,IsDefault)(也可以满足这样的查询)

于 2013-11-25T11:16:45.980 回答
1

我们的一些数据库中有一些大表,其中有一些特定的列通常为空,并且访问这些表的大多数查询仅从该特定列不为空的表中选择数据。

如果没有对索引的过滤器,我们必须索引整个表,每一行,包括那些我们永远不会通过查询访问的行。

使用索引上的过滤器,查询运行得更快,因为查询上的谓词与索引上的过滤器匹配,因此优化器选择要使用的小得多的索引。

于 2013-11-25T11:50:38.213 回答