本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
相信大家都知道索引能够极大地提高数据库检索的效率,让Query执行得更快。但是可能并不是创建了索引就高效了,索引也可以给数据库带来了一些负面的影响。比较频繁更新的数据表,也会频繁的创建和修改表的索引,索引页会浪费空间和性能的,同时还可能造成表的死锁。
索引有好有坏,索引中的字段被更新的时候,不仅仅要更新表中的数据,还要更新索引数据,以确保索引信息是准确的,这个问题致使IO访问量较大增加,不仅仅影响查询和插入、删除、修改的效率,还影响了整个存储系统的资源消耗,加大了整个存储的负载.
当然,并不是存在更新的字段就不适合创建索引,而需要从使用策略上来判定是否需要创建索引。那么如何来判断字段是否适合创建索引呢?一般有以下几种方法:
1.先创建上索引,然后根据实际情况,分析是否创建索引前后加快了效率和系统性能达到最优
2.如果字段的更新频繁程度超过查询次数,那么不建议创建索引
3.如果表内有千万量的数据,同时对检索有要求,那么必须要创建索引
4.如果该字段频繁被更新,但该字段不会作为查询条件,则不需要创建索引
5.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
例如状态字段,性别字段,类型字段等都不适合创建索引。因为这类值创建了索引,数据库查询引擎也可能不会使用索引。由于索引字段中每个值都含有大量的记录,那么存储引擎在根据索引访问数据的时候会带来大量的随机IO,甚至有些时候还会出现大量的重复IO。
总结:我们需要根据具体的业务和需求来确定是否需要创建索引,不要太固守教条。如果资源比较丰富,则可以通过读写分离的效果来实现高效的检索。
索引带来的另外一个害处是容易造成死锁。死锁带来的危害非常大,我们在做业务的同时,有必要将死锁问题加入到系统的架构当中,如果出现死锁,我们要及时的通过sql去kill掉连接。
版权声明:本文为博主原创文章,未经博主允许不得转载。
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » SQL创建索引的利和弊