TOP

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

由于工作中发生了这个问题,产生的影响比较大,而且也为了强化自己对于这次问题的印象以及处理方法,总结一下。

1.问题的原因:

1. 一些表并没有加上索引。

2. 引擎错误。在一个经常进行写操作的表,使用的为Myisam引擎,正确的应该使用InnoDB。前者是在写操作少而有大量查询操作的表中使用的。

3. 有一些表中的数据使用逻辑删除,表中有大量无意义数据。


2.目前用的解决方法

1. 对于没有加上索引的表:

  • 对于没有查询操作的sql,不处理
  • 对于有查询操作的
  • 将需要改善的sql语句复制到GUI工具,比如SQLYOG。将其中需要补充的参数用常量代替,用EXPLAIN 解释语句。如果发现查询结果的type字段中为ALL的,查看对应的表,并给连接的字段加上索引。
  • 尽量不要使用IN和NOT IN

2. 对于引擎错误的

  • 当时发现一个奇怪的问题。就是我在DELETE一个表中一条数据,居然需要查询全表,而且是加上的索引也没用,换成UPDATE操作也是如此。后来该表从MYISAM引擎换成INNODB,删除就是毫秒级别的了。

3. 表中无意义的数据过多。

  • 完全无意义的数据因为前面的习惯,用了逻辑删除,导致数据过多。要区分删除的数据是否有用,如果有用也应该移到历史库
posted on 2018-06-11 22:45  wolfZing  阅读(19)  评论(0)    收藏  举报