提升查询效率,了解SQL的索引管理规则

索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,而且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。经过索引,能够加快数据的查询速度和减小系统的响应时间;可使表和表之间的链接速度加快。web

  可是,不是在任什么时候候使用索引都可以达到这种效果。若在不恰当的场合下,使用索引反而会事与愿违。因此,在SQL Server数据库中使用索引的话,仍是须要遵照必定的规则。数据库

  规则一:天下没有免费的午饭,使用索引是须要付出代价的服务器

  索引的优势有目共睹,可是,却不多有人关心过采用索引所须要付出的成本。若数据库管理员可以对索引所须要付出的代价有一个充分的认识,也就不会那么随意处处创建索引了。数据库设计

  仔细数数,其实创建索引的代价仍是蛮大的。如建立索引和维护索引都须要花费时间与精力。特别是在数据库设计的时候,数据库管理员为表中的哪些字段须要创建索引,要调研、要协调。如当建有索引的表中的纪录又增长、删除、修改操做时,数据库要对索引进行从新调整。虽然这个工做数据库自动会完成,可是,须要消耗服务器的资源。当表中的数据越多,这个消耗的资源也就越多。如索引是数据库中实际存在的对象,因此,每一个索引都会占用必定的物理空间。若索引多了,不但会占用大量的物理空间,并且,也会影响到整个数据库的运行性能。ide

  可见,数据库管理员若要采用索引来提升系统的性能,自身仍然须要付出很多的代价。数据库管理员如今要考虑的就是如何在这两个之间取得一个均衡。或者说,找到一个回报与投入的临界点。性能

  规则二:对于查询中不多涉及的列或者重复值比较多的列,不要创建索引spa

  在查询的时候,若是咱们不按某个字段去查询,则在这个字段上创建索引也是浪费。如如今有一张员工信息表,咱们可能按员工编号、员工姓名、或者出身地去查询员工信息。可是,咱们每每不会按照×××号码去查询。虽然这个×××号码是惟一的。此时,即便在这个字段上创建索引,也不可以提升查询的速度。相反,增长了系统维护时间和占用了系统空间。这简直就是搬起石头砸本身的脚呀。设计

  另外,如上面的员工信息表,有些字段重复值比较多。如性别字段主要就是“男”、“女”;职位字段中也是有限的几个内容。此时,在这些字段上添加索引也不会显著的增长查询速度,减小用户响应时间。相反,由于须要占用空间,反而会下降数据库的总体性能。orm

  数据库索引管理中的第二条规则就是,对于查询中不多涉及的列或者重复值比较多的列,不要创建索引。对象

  规则三:对于按范围查询的列,最好创建索引

  在信息化管理系统中,不少时候须要按范围来查询某些交易记录。如在ERP系统中,常常须要查询当月的销售订单与销售出货状况,这就须要按日期范围来查询交易记录。若有时候发现库存不对时,也须要某段时期的库存进出状况,如5月1日到12月3日的库存交易状况等等。此时,也是根据日期来进行查询。

  对于这些须要在指定范围内快速或者频繁查询的数据列,须要为其创建索引。由于索引已经排序,其保存的时候指定的范围是连续的,查询能够利用索引的排序,加快查询时间,减小用户等待时间。

  不过,若虽然可能须要按范围来进行查询,可是,若这个范围查询条件利用的很少的状况下,最好很差采用索引。如在员工信息表中,可能须要查询2008 年3月份之前入职的员工明细,要为他们增长福利。可是,因为表中记录很少,并且,也不多进行相似的查询。若维这个字段创建索引,虽然无伤大雅,可是很明显,索引所得到的收益要低于其成本支出。对数据库管理员来讲,是得不偿失的。

  再者,若采用范围查询的话,最好能利用TOP关键字来限制一次查询的结果。如第一次按顺序只显示前面的500条记录等等。把TOP关键字跟范围一块儿使用,能够大大的提升查询的效率。

相关文章
相关标签/搜索