评价索引的有效性(Evaluating Index Usefulness)
SQL Server提供索引主要有两个原因:其一是作为一种保证数据库表中数据唯一性的方法;其二,提供了一种快速访问表中数据的方法。创建合适的索引是数据库物理设计时最为重要的方面之一。因为你不能在一个表上无限制地创建索引,而且不管怎么说,它也是不可行的。所以,你将想在一些具有高选择性 (high Selectivity )的列上创建索引,这样,查询时系统将会利用这些索引。一个索引的选择性定义如下:
select count(distinct au_lname) as '# unique', count(*) as '# rows', str(count(distinct au_lname) / cast (count(*) as real),4,2) as 'selectivity' from authors go
# unique # rows selectivity
----------- ----------- ------------------------------
22 23 0.96
author表的au_lname列的有效率计算值为0.96,表明在au_lname创建的索引将具有高选择性,也是一个好的候选索引。除了一行外,其余所有行的last name值都唯一。 现在,来分析state列的选择性:
select count(distinct state) as '# unique', count(*) '# rows', str(count(distinct state) / cast (count(*) as real),4,2) as 'selectivity' from authors go
select state, count(*) from authors group by state order by 2 desc go