相信大家都知道索引能够极大地提高数据库检索的效率,让Query执行得更快。但是可能并不是创建了索引就高效了,索引也可以给数据库带来了一些负面的影响。比较频繁更新的数据表,也会频繁的创建和修改表的索引,索引页会浪费空间和性能的,同时还可能造成表的死锁。
索引有好有坏,索引中的字段被更新的时候,不仅仅要更新表中的数据,还要更新索引数据,以确保索引信息是准确的,这个问题致使IO访问量较大增加,不仅仅影响查询和插入、删除、修改的效率,还影响了整个存储系统的资源消耗,加大了整个存储的负载.
当然,并不是存在更新的字段就不适合创建索引,而需要从使用策略上来判定是否需要创建索引。那么如何来判断字段是否适合创建索引呢?一般有以下几种方法:
1.先创建上索引,然后根据实际情况,分析是否创建索引前后加快了效率和系统性能达到最优
2.如果字段的更新频繁程度超过查询次数,那么不建议创建索引
3.如果表内有千万量的数据,同时对检索有要求,那么必须要创建索引
4.如果该字段频繁被更新,但该字段不会作为查询条件,则不需要创建索引
5.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
例如状态字段,性别字段,类型字段等都不适合创建索引。因为这类值创建了索引,数据库查询引擎也可能不会使用索引。由于索引字段中每个值都含有大量的记录,那么存储引擎在根据索引访问数据的时候会带来大量的随机IO,甚至有些时候还会出现大量的重复IO。
总结:我们需要根据具体的业务和需求来确定是否需要创建索引,不要太固守教条。如果资源比较丰富,则可以通过读写分离的效果来实现高效的检索。
索引带来的另外一个害处是容易造成死锁。死锁带来的危害非常大,我们在做业务的同时,有必要将死锁问题加入到系统的架构当中,如果出现死锁,我们要及时的通过sql去kill掉连接。
版权声明:本文为博主原创文章,未经博主允许不得转载。
: » SQL创建索引的利和弊
原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/252342.html