今天是公司发布程序版本的时间,本来很期待的心情。 被自己的
"大意失荆州" 的工作态度导致出现生产事故 ,请大家们牢记
是这样的:生产上有300万条数据
通过mysql 去进行一个查询 导致没有加关键索引列导致 查数据 88秒 而且 数量并不大 是根据家庭查询指定的数据 导致由于当前数有几种不同的分类 我是用到了 REGEXP
REGEXP
这个 正则 主要是 针对多数据查询的 。类似like 但是它风险高在索引完全是不走的。 如果你要使用这个 。一定一定要根据其他索引关键字段 同时使用。否则 你就会看到和我一样的痛苦。 疯狂的跟老板解释。 我TM 真是昨晚没睡好 大意啊!!!!!!!!!
好了 不开玩笑了。
其实REGEXP 在多数据下 应该严谨使用的。 特别是大数据情况下使用这个东西非常致命。 尤其是全表扫描的时候没有去针对性的解决。 在测试环境中没有发现当前问题 查询88秒 。
注意: 因为测试环境数据量是比较小的 。 使用这个 完全影响不大。
450W的 数据量
select * from syn6 WHERE cno REGEXP '110104324310966|113420105587|0014320012883|6110013421239|863241007048|324006021027048' group by cno and code ='110096' group by cno
vs
select * from syn6 WHERE cno REGEXP
-- 这个地方使用的是foreach 遍历就可以做到 用|分割 就达到当前效果
'110104324310966|113420105587|0014320012883|6110013421239|863241007048|324006021027048' group by cno ---主要上边 对比缺少and code =''内容---- group by cno
看似这两条数据差别根本性不大。 但是索引的重要性是占有99%时间
vs
索引列cno 起到了 关键字段 。 一个 88秒 一个 0.187 秒 活生生的 在生产中遇到的低级错误。 大家看到肯定有工作经历的很多共鸣。 一时开发一时爽。 直到生产OMG ~~~~~~~~~
今天我熬夜加班处理生产事故。 以后遇到各种奇葩问题 跟各位分享。
最后大家在学习过程中一定要好好用功!!!!!!!!不要是那种懒出境界的懒!
多动手优化mysql 索引 多使用 Explan 特别是工作的小伙伴 更要谨慎