定量认识MySQL
一般一台 MySQL 服务器,平均每秒钟执行的 SQL 数量在几百左右,就已经是非常繁忙了,即使看起来 CPU 利用率和磁盘繁忙程度没那么高,你也需要考虑给数据库“减负”了。
定量:
- 如果遍历行数在百万以内的,只要不是每秒钟都要执行几十上百次的频繁查询,可以认为是安全的。
- 遍历数据行数在几百万的,查询时间最少也要几秒钟,你就要仔细考虑有没有优化的办法。
- 遍历行数达到千万量级和以上的,这种查询就不应该出现在你的系统中。当然我们这里说的都是在线交易系统,离线分析类系统另说。
MySQL 中单个表数据量,也要尽量控制在一千万条以下,最多不要超过二三千万这个量级。原因也很好理解,对一个千万级别的表执行查询,加上几个 WHERE 条件过滤一下,符合条件的数据最多可能在几十万或者百万量级,这还可以接受。但如果再和其他的表做一个联合查询,遍历的数据量很可能就超过千万级别了。所以,每个表的数据量最好小于千万级别。
使用索引
对于更新频繁并且对更新性能要求较高的表,可以尽量少建索引。 而对于查询较多更新较少的表,可以根据查询的业务逻辑,适当多建一些索引。
分析SQL执行计划
在sql语句前加上explain,就可以查看查询计划。 rows列含义就是MySQl预估执行这个SQL可能会遍历的数据行数。type这一列,表示了这个查询的访问类型。
此文章为3月Day9学习笔记,内容来源于极客时间《后端存储实战课》