关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »对SQL Server索引的有效性的评价

    对SQL Server索引的有效性的评价

    2010-07-07 10:41:00 出处:ITJS
    分享

    以下的文章主要是对SQL Server索引的有效性(Evaluating Index Usefulness)的评价,我们大家都知道SQL Server数据库提供索引主要的原因有两个:其一是作为一种保证数据库表中数据唯一性的方法。

    其二,提供了一种快速访问表中数据的方法。创建合适的索引是数据库物理设计时最为重要的方面之一。因为你不能在一个表上无限制地创建SQL Server索引,而且不管怎么说,它也是不可行的。所以,你将想在一些具有高选择性 (high Selectivity )的列上创建索引,这样,查询时系统将会利用这些索引。一个索引的选择性定义如下:

    引用

    选择率 = (唯一索引值的个数)/ (表中所有行数)

    Selectivity ratio = (Number of unique index values)/ (Total number of rows in the 

    假如选择率高——也就是说,大量行都可以用索引键值来唯一标识——那么该索引就具有高选择性,即对优化器来说也是有用的。最佳的选择性是1,即每一行都有一个唯一的索引键值。低选择性意味着表中有许多重复的键值,这样的SQL Server索引将很少有用。SQL Server优化器基于索引的选择性来决定对一个查询是否使用索引。越高的选择性,SQL Server检索结果集(Result set)就越快和越有效。

    例如,你正在对authors 表中的索引的有效性进行评估。假如大多数查询是以author's last name或者state来进行访问的。因为大量的并发用户会修改该表的数据,你只允许一个索引——author's last name或者state,你将会选择谁?让我们进行一些分析来判断哪个索引更有效些,或者更有选择性。首先,利用一个查询来确定pubs数据库中 author表的last name列的有效性:

    Sql代码

    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   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创建的SQL Server索引将具有高选择性,也是一个好的候选索引。除了一行外,其余所有行的last name值都唯一。 现在,来分析state列的选择性:

    Sql代码   select count(distinct state) as '# unique',   count(*) '# rows',   str(count(distinct state) / cast (count(*) as real),4,2) as 'selectivity'   from authors   go   select count(distinct state) as '# unique',   count(*) '# rows',   str(count(distinct state) / cast (count(*) as real),4,2) as 'selectivity'   from authors   go   # unique # rows selectivity    8 23 0.35   

    正如你所看到的,state列的SQL Server索引选择率(0.35)比au_lname索引选择率要低很多,将不太有用。

    对于这一点,你可能会问,是否因为state列中的一些值具有较高的重复性而导致了选择性的下降,或者说仅仅只有一些值具有唯一性。你可以用下面的查询来确定 

    Sql代码   select state, count(*)   from authors   group by state   order by 2 desc   go   select state, count(*)   from authors   group by state   order by 2 desc   go   state   CA 15   UT 2   TN 1   MI 1   OR 1   IN 1   KS 1   MD 1   

    正如你所预料到的,state值,除了一个外,其余值都相对唯一。因为表中有多一半的state值都为‘CA’。所以state可能不是一个好的候选索引列,特别是假如大部分时间你都以CA来进行查询,此时,SQL Server将发现扫描整个表将比借助索引进行查询数据更有效。

    一般来说,假如一个键值的选择率低于0.85,那么优化器通常会选择表扫描来处理查询。在这种情况下,使用表扫描来获取所有满足条件的数据行将比通过B-Tree来定位大量数据行来查找更有效率。

    假如有更多的索引可以选择,那么SQL Server将怎样来确定每个索引是否具有选择性和到底选择哪一个索引对用户来说更有效呢?例如,SQL Server怎么知道下面的索引能够返回多少行?

    select * from table where key between 1000000 and 2000000  

    假如该表在0到20,000,000之间有10,000,000行记录,优化器如何知道是使用一个SQL Server索引还是进行表扫描呢?假如在该范围内有10行记录,或者900,000,又如何选择?SQL Server如何来估计在1,000,000 至2,000,000之间有多少行?等等诸如此类的问题,优化器是从索引统计(Index Statistics)中获得这些信息的。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。