如何提高非选择性指数的表现?

时间:2013-09-11 10:41:43

标签: sql sql-server indexing query-performance

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

具有良好选择性的示例 一个有100'000条记录和一条索引列的表有88000个不同的值,那么这个指数的选择性是88'000 / 10'0000 = 0.88。

现在来点。我有一张表有1,80,000条记录。 在搜索条件中经常使用的字段是 (1)使用用户名称搜索记录。 字段类型: - >不为null,nvarchar(32)。 独特的记录是627 (2)使用Active_date搜索记录。 字段类型: - > DateTime,Null。 独特记录是85627。 (3)使用Current_state搜索记录 字段类型: - >不是Null,nvarchar(32)。 唯一记录只有2个“待定”和“已关闭”。

目前以上所有字段都已编入索引。就选择性而言,案例(1)和(3)在提高绩效方面对我们应该做些什么并不是最具选择性的?

先谢谢你,Sam

1 个答案:

答案 0 :(得分:0)

选择性并不能说明整个故事。假设有10个待处理的应用程序和1.000.000个已关闭的应用程序。那么状态指数不是很有选择性,但它仍然非常有用!该索引可以帮助人们快速浏览待处理的应用程序,这可能是他们经常做的事情。

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

P.S。只有索引最左边的已知列才能用于解析搜索。例如:

select * from Users where name = 'fred'

(name)上的索引可用于解析此查询,但(active_date, name)上的索引不能。{/ p>