SQL Server索引管理之六大铁律[MSSQL防范]
本文“SQL Server索引管理之六大铁律[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
索引是以表列为底子的数据库对象.索引中保存着表中排序的索引列,并且记录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序.通过索引,可以加快数据的查询速度和削减系统的呼应时间;可以使表和表之间的衔接速度加快.
但是,不是在任什么时刻候利用索引都可以到达这种效果.若在不得当的场所下,利用索引反而会适得其反.所以,在sql server数据库中利用索引的话,还是需求服从一定的法则.
铁律一:天下没有免费的午饭,利用索引是需求付出代价的
索引的长处有目共睹,但是,却很少有人关心过采取索引所需求付出的本钱.若数据库管理员可以对索引所需求付出的代价有一个充分的熟习,也就不会那么随便处处成立索引了.
细心数数,其实成立索引的代价还是蛮大的.如成立索引和保护索引都需求耗费时间与精神.分外是在数据库计划的时刻,数据库管理员为表中的哪些字段需求成立索引,要调研、要调和.如当建有索引的表中的记录又增添、删除、改正操作时,数据库要对索引举行重新调整.固然这个工作数据库自动会完成,但是,需求损耗服务器的资源.当表中的数据越多,这个损耗的资源也就越多.如索引是数据库中实际存在的对象,所以,每个索引城市占用一定的物理空间.若索引多了,不但会占用大量的物理空间,并且,也会影响到整个数据库的运行性能.
可见,数据库管理员若要采取索引来提高系统的性能,自身仍旧需求付出不少的代价.数据库管理员目前要考虑的就是如安在这两个之间获得一个均衡.大概说,找到一个回报与投入的临界点.
铁律二:关于查询中很少触及的列大概反复值对比多的列,不要成立索引
在查询的时刻,假如我们不按某个字段去查询,则在这个字段上成立索引也是浪费.如目前有一张员工信息表,我们大概按员工编号、员工姓名、大概出身地去查询员工信息.但是,我们常常不会按照身份证号码去查询.固然这个身份证号码是唯一的.此时,即便在这个字段上成立索引,也不可以提高查询的速度.相反,增添了系统保护时间和占用了系统空间.这简直就是搬起石头砸自己的脚呀.
别的,如上面的员工信息表,有些字段反复值对比多.如性别字段主要就是“男”、“女”;职位字段中也是有限的几个内容.此时,在这些字段上增添索引也不会明显的增添查询速度,削减用户呼应时间.相反,因为需求占用空间,反而会降低数据库的整体性能.
数据库索引管理中的第二条铁律就是,关于查询中很少触及的列大概反复值对比多的列,不要成立索引.
铁律三:关于按范围查询的列,最好成立索引
在信息化管理系统中,很多时刻需求按范围来查询某些交易记录.如在ERP系统中,常常需求查询当月的贩卖订单与贩卖出货情形,这就需求按日期范围来查询交易记录.若有时刻发现库存不对时,也需求某段期间的库存收支情形,如5月1日到12月3日的库存交易情形等等.此时,也是按照日期来举行查询.
关于这些需求在指定范围内快速大概频繁查询的数据列,需求为其成立索引.因为索引已经排序,其保存的时刻指定的范围是持续的,查询可以操纵索引的排序,加快查询时间,削减用户等候时间.
不过,若固然大概需求按范围来举行查询,但是,若这个范围查询条件操纵的不多的情形下,最好不好采取索引.如在员工信息表中,大概需求查询2008年3月份从前入职的员工明细,要为他们增添福利.但是,由于表中记录不多,并且,也很少举行近似的查询.若维这个字段成立索引,固然无伤大雅,但是很明显,索引所得到的收益要低于其本钱支出.对数据库管理员来说,是得不偿失的.
再者,若采取范围查询的话,最好能操纵TOP关键字来限制一次查询的后果.如第一次按次序只显示前面的500条记录等等.把TOP关键字跟范围一同利用,可以大大的提高查询的效率.
铁律四:表中若有主键大概外键,一定要为其成立索引
定义有主键的索引列,一定要为其成立索引.因为主键可以加快定位到表中的某一行.结合索引的作用,可以使得查询的速度加倍.如在员工信息表中,我们常常把员工编号设置为主键.因为这不但可以提高查询的速度,并且因为主键要求记录的唯一,还可以保证员工编号的唯一性.此时,若再把这个员工编号字段设置为索引,则通过员工编号来查询员工信息,其效率要比没有成立索引超过很多.
别的,若要使得某个字段的值唯一,可以通过两种索引方法实现.一种就是上面所讲的主键索引.还有一种就是唯一索引,操纵UNIQUE关键字指定字段内容的唯一性.这两种方法城市在表中的指定列上自动成立唯一索引.这两种方法的后果没有明显的辨别.查询优化器不会辨别毕竟是哪类方法成立的唯一性索引,并且他们举行数据查询的方法也是相同的.
若某张表中的数据列定义有外键,则最好也要为这个字段成立索引.因为外键的主要作用就在于表与表之间的衔接查询.若在外键上成立索引,可以加快表与表之间的衔接查询.如在员工基本信息表中,有一个字段为员工职位.由于员工职位常常在改变,在这里,存储的其实只是一个员工职位的代码.在别的一张职位信息表中具体记录着该职位的相关信息.此时,这个员工职位字段就是外键.若在这个字段上成立外键,则可以明显提高两张表的衔接速度.并且,记录越多,其效果越加明显.
所以,当表中有外键大概主键的时刻,就最好为其成立索引.通过索引,可以强化主键与外键的作用,提高数据库的性能.
铁律五:关于一些特别的数据范例,不要成立索引
在表中,有些字段对比特别.如文本字段(TXT)、图象范例字段(IMAGE)等等.假如表中的字段属于这些数据范例,则最好不要为其成立索引.因为这些字段有一些共同的特点.如长度不肯定,要末很长,几个字符;要末就是空字符串.如文本数据范例常在利用系统的数据库表顶用来做备注的数据范例.有时刻备注很长,但有时刻又没有数据.若这种范例的字段上成立索引,那根本起不了作用.相反,还增添了系统的负担.
所以,在一些对比特别的数据范例上,成立索引要谨严.在普通情形下,没有必要为其成立索引.但是,也有特别的情形.若有时刻,在ERP系统中,有产品信息这个表,此中有个产品规格这个字段.有时刻,其长度大概长达5000个字符.此时,只有文本型的数据范例可以包容这么大的数据量.并且,在查询的时刻,用户又喜好通过规格这个参数来查询产品信息.此时,若不为这个字段成立索引的话,则查询的速度会很慢.碰到这种情形时,数据库管理员只有牺牲一点系统资源,为其成立索引.
从这里也可以看出,固然以上几条说的时铁律,但是,能否需求遵守,还是需求数据库管理员按照企业的实际情形,做出公道的挑选.
铁律六:索引可以跟Where语句的调集融为一体
用户在查询信息的时刻,有时会常常会用到一些限制语句.如在查询贩卖订单的时刻,常常会用到客户以及下单日期的条件调集;如在查询某个产品的库存交易情形时,就会操纵产品编号与交易日期起止日期的条件调集.
关于这些常常用在Where子句中的数据列,将索引成立在Where子句的调集历程中,关于需求加快大概频繁检索的数据列,可以让这些常常参与查询的数据列按照索引的排序举行查询,以加快查询的时间.
总之,索引就仿佛一把双刃剑,便可以提高数据库的性能,也大概对数据库的性能起到背面作用.作为数据库管理员,要有这个本领判断在符合的时间、符合的业务、符合的字段上成立符合的索引.以上六个铁律,只是对成立索引的一些基本要求.
以上是“SQL Server索引管理之六大铁律[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |