MySQL反经验定律创建索引

说明

相信大家在做数据库优化的时候肯定都会听到,一定不能这样做,必须要这样做。这也是为什么DBA会和开发"打架"原因,毕竟有些经验的开发多多少少也会一点优化啦。

大家有听到过在为表建立索引的时候一定不能在选择性(selective)低的字段上建立索引吧,比如(性别、类型、状态等等)。

我们的应用就有类似以下一张表:

其中status是有0,1这两个值:

  • 0:代表数据是从别地同步过来的数据,但是我们未经过处理。
  • 1:说明我们已经处理过的数据。

在几次无意中的show processlist总是能看到有这样的语句在Sending data:

好奇的小看了一下发现这个表的数据还挺多。自己在开发库执行了一下,执行的好久。最后和开发了解了一下,他们说这是一个排程,每5分钟一次,经过更深入的了解,知道他们要操作的数据其实只是status=0的,而在在5分钟之内接收的数据和总数据相比简直是小巫见老巫了。

于是就在开发库添加一下索引。发现效果真是杠杠的。

演示

下面是一系列演示:

 

昵称:HH
QQ:275258836
ttlsa群交流沟通(QQ群②:6690706 QQ群③:168085569 QQ群④:415230207(新) 微信公众号:ttlsacom)

感觉本文内容不错,读后有收获?

逛逛衣服店,鼓励作者写出更好文章。

    A+
发布日期:2016年03月06日  所属分类:MySQL
标签:
HH

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

  1. 小子 0

    我觉得这个原因没有写清;而且测试数据的 status 字段 0 的数据量要比 1 的小得多

  2. 匿名 5

    写得挺好的

  3. AAA 5

    这个也要写篇文章。。。