SQL Server索引管理之六大铁律
来源:asp之家 发布时间:2009-11-26 14:55:00
索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引,可以加快数据的查询速度和减少系统的响应时间;可以使表和表之间的连接速度加快。 但是,不是在任何时候使用索引都能够达到这种效果。若在不恰当的场合下,使用索引反而会事与愿违。所以,在SQL Server数据库中使用索引的话,还是需要遵守一定的规则。
铁律一:天下没有免费的午餐,使用索引是需要付出代价的
索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。
仔细数数,其实建立索引的代价还是蛮大的。如创建索引和维护索引都需要花费时间与精力。特别是在数据库设计的时候,数据库管理员为表中的哪些字段需要建立索引,要调研、要协调。如当建有索引的表中的纪录又增加、删除、修改操作时,数据库要对索引进行重新调整。虽然这个工作数据库自动会完成,但是,需要消耗服务器的资源。当表中的数据越多,这个消耗的资源也就越多。如索引是数据库中实际存在的对象,所以,每个索引都会占用一定的物理空间。若索引多了,不但会占用大量的物理空间,而且,也会影响到整个数据库的运行性能。
可见,数据库管理员若要采用索引来提高系统的性能,自身仍然需要付出不少的代价。数据库管理员现在要考虑的就是如何在这两个之间取得一个均衡。或者说,找到一个回报与投入的临界点。
铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引
在查询的时候,如果我们不按某个字段去查询,则在这个字段上建立索引也是浪费。如现在有一张员工信息表,我们可能按员工编号、员工姓名、或者出身地去查询员工信息。但是,我们往往不会按照身份证号码去查询。虽然这个身份证号码是唯一的。此时,即使在这个字段上建立索引,也不能够提高查询的速度。相反,增加了系统维护时间和占用了系统空间。这简直就是搬起石头砸自己的脚呀。
另外,如上面的员工信息表,有些字段重复值比较多。如性别字段主要就是“男”、“女”;职位字段中也是有限的几个内容。此时,在这些字段上添加索引也不会显著的增加查询速度,减少用户响应时间。相反,因为需要占用空间,反而会降低数据库的整体性能。
数据库索引管理中的第二条铁律就是,对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。
铁律三:对于按范围查询的列,最好建立索引
在信息化管理系统中,很多时候需要按范围来查询某些交易记录。如在ERP系统中,经常需要查询当月的销售订单与销售出货情况,这就需要按日期范围来查询交易记录。如有时候发现库存不对时,也需要某段时期的库存进出情况,如5月1日到12月3日的库存交易情况等等。此时,也是根据日期来进行查询。
对于这些需要在指定范围内快速或者频繁查询的数据列,需要为其建立索引。因为索引已经排序,其保存的时候指定的范围是连续的,查询可以利用索引的排序,加快查询时间,减少用户等待时间。
不过,若虽然可能需要按范围来进行查询,但是,若这个范围查询条件利用的不多的情况下,最好不好采用索引。如在员工信息表中,可能需要查询2008年3月份以前入职的员工明细,要为他们增加福利。但是,由于表中记录不多,而且,也很少进行类似的查询。若维这个字段建立索引,虽然无伤大雅,但是很明显,索引所获得的收益要低于其成本支出。对数据库管理员来说,是得不偿失的。
再者,若采用范围查询的话,最好能利用TOP关键字来限制一次查询的结果。如第一次按顺序只显示前面的500条记录等等。把TOP关键字跟范围一起使用,可以大大的提高查询的效率。


猜你喜欢
- ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。
- 前几天在点石论坛里有会员问一个问题,我写的子域名与二级目录,和kyw写的田忌赛马相互矛盾,不知道该听哪个。在论坛里简单回复了几句,今天再详细
- 问:最近把服务器转到国外godaddy空间,我使用的程序是新云asp+access生成DIV+CSS静态网页.请问在生成网页的时候只生成没有
- 做谷歌这么多年了,一直最佩服的就是谷歌的防作弊手段,因为谷歌防作弊是对外保密的,因此,很多人作弊,虽然道理一套,表面上可能无坚不摧,但是真正
- 北京时间11月14日上午消息,据国外媒体今日报道,美国社交网站Ning已经搬迁到了Facebook原先的办公场所—&am
- 北京时间10月14日上午消息,据国外媒体报道,消息人士透露,温思坦影业(Weinstein Company)准备将旗下富豪社交网络ASmal
- 因为需要配置固定IP,在网上找了很久终于找到一个可行的例子,自己配置成功了。1.首先获取你的GATEWAY方便后面在cento系统配置里使用
- 1、创建两个文件夹redis和sentinel文件夹用于存放docker-compose.yml文件2、redis下的docker-comp
- 前言在用Deepin用户界面的时候,做的是真心的好看,界面效果是真的美观简洁,没有那些花哨的特效,就是刚开始还有点不习惯的,尽量安装的时候电
- 北京时间10月16日消息,据美国科技博客网站Silicon Alley Insider报道,一家美国市场研究公司周四表示,过去一段时间内,F
- 在linux上以服务的方式启动java程序1.安装jsvc在tomcat的bin目录下有一个jsvc.tar.gz的文件,进入tomcat的
- “百度更喜欢独特的原创内容,如果您的站点内容只是从各处采集复制而成,很可能不会被百度收录。”Goog
- 说实话,今天讲这个主题纯属纸上谈兵,请各位高人莫怪,至今惭愧没有一个像样的站,不过因为经常为别人做技术以及做空间销售过程中接触过不少站长,了
- 二、防病毒系统1、安装McAfeeuvscanforlinuxMcAfeeuvscanforlinux虽然是试用,但是没有什么限制,可以升级
- 在Discuz! 7.0中发布多媒体,比如引用其他网站的视频、mp3 等。需要设置三个地方。首先,对编辑器设置。打开后台,界面=>编辑
- Ubuntu 20.04已经在2020年4月份正式发布,笔者今天正式安装了一个镜像系统,并在该系统中安装vncserver以便于远程图形化管
- 连接到你的独立服务器,一般来说有两种方式:你可以使用一个基于网络的接口,如Plesk;或者你可以使用SecureShellprotocol(
- 大型网站优化,是很多seoer喜欢的工作,作为媒体型的大型网站企业,往往有专职的美工程序,专职的编辑团队,经过seoer合理的seo建议,往
- Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的
- 1. Packetdrill 编译与安装源码链接 https://github.com/google/packetdrill.git源码编译