1

根据建议索引必须是最有选择性的以提高性能。作为一般准则,我们应该在经常被查询少于表的 15% 行的表上创建索引。索引列/列中不同值的数量与表中记录数的比率表示一个索引。

具有良好选择性的示例 具有 100'000 条记录且其索引列之一具有 88000 个不同值的表,则该索引的选择性为 88'000 / 10'0000 = 0.88。

现在说到点子上了。我有一张有 1,80,000 条记录的表。搜索条件中经常使用的字段是 (1) 使用用户名搜索记录。字段类型:-> 非空,nvarchar(32)。唯一记录是使用 Active_date 的 627 (2) 条搜索记录。字段类型:-> DateTime,Null。唯一记录是 85627 。(3) 使用 Current_state Field Type 搜索记录:-> Not Null , nvarchar(32)。唯一记录只有 2 条,分别是“Pending”和“Closed”。

目前上述所有字段均已编入索引。就选择性而言,情况(1)和(3)不是最有选择性的,在提高性能方面我应该如何处理它们?

在此先感谢,山姆

4

1 回答 1

0

选择性并不能说明全部。假设有 10 个待处理的申请和 1.000.000 个已关闭的申请。那么关于状态的索引不是很有选择性,但还是很有用的!该索引将帮助人们快速浏览待处理的申请,这可能是他们经常做的事情。

另一个例子是票务系统。大部分工作都是在公开票上完成的。因此,虽然票证的状态不是很有选择性,但它仍然是索引的绝佳候选者。

PS 只有索引中最左边的已知列可用于解析搜索。例如:

select * from Users where name = 'fred'

可以使用索引(name)来解析此查询,但不能使用索引(active_date, name)

于 2013-09-11T11:44:47.867 回答