• 1
  • 2
  • 3
  • 4
  • 5
mssql数据库问题 首 页  »  帮助中心  »  数据库  »  mssql数据库问题
SQL创建索引的利弊分析
发布日期:2016-4-16 19:4:22

  SQL创建索引的利弊分析

  大家应该都知道索引可以很大程度地提高数据库检索的效率,可以让Query执行得更加快。但是可能并不是创建了索引就可以高效了,索引也可能给数据库带来了一些负面的影响。比较频繁更新的数据表,也会频繁的创建与修改表的索引,索引页会浪费空间和性能的,同时还可能会造成表的死锁。

  索引有好有坏,索引中的字段被更新的时候,不仅要更新表中的数据,而且还需要更新索引数据,从而确保索引信息是准确的,这个问题导致IO访问量增加较大,不仅仅影响查询和插入、删除、修改的效率,而且还会影响了整个存储系统的资源消耗,加大了整个存储的负载.

  当然,并不是存在更新的字段就不适合创建索引,而是需要从使用策略上来判定是否需要创建索引。那么如何来判断字段是否适合创建索引呢?

  一般有以下几种方法:

  1.先创建上索引,然后再根据实际情况,分析是否创建索引前后加快了效率和系统性能达到最优;

  2.如果表内有千万量的数据,同时对检索有要求,那么必须要创建索引;

  3.如果字段的更新频繁程度超过查询次数,那么不建议创建索引;

  4.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;

  5.如果该字段频繁被更新,但该字段不会作为查询条件,则不需要创建索引。

  比如说状态字段,性别字段,类型字段等都是不适合创建索引的。因为这类值创建了索引,数据库查询引擎也可能不会使用索引。由于索引字段中的每个值都含有大量的记录,那么存储引擎在根据索引访问数据的时候会带来大量的随机IO,甚至有些时候还会出现大量的重复IO。

  总结:

  我们需要根据具体的业务和需求来确定是否需要创建索引,如果资源比较丰富,那么可以通过读写分离的效果来实现高效的检索。

  索引带来的另外一个害处是容易造成死锁。死锁带来的危害非常大,我们在做业务的同时,有必要将死锁问题加入到系统的架构当中,如果出现死锁,我们要及时的通过sql去kill掉连接。