在大多数实际的系统中, 慢 SQL 消耗掉的数据库资源, 往往是正常 SQL 的几倍, 几十倍甚至几百倍.
怎样才能在开发阶段尽量避免写出慢 SQL 呢?
估算数据量
慢 SQL 对数据库的影响, 是一个量变到质变的过程, 对 "量" 的把握, 就很重要. 编写一条查询语句的时候, 可以依据你要查询数据表的数据总量, 估算一下这条查询大致需要遍历多少行数据.
使用索引
使用索引可以有效地减少执行查询时遍历数据的行数, 提高查询性能. 在每次开发新功能, 需要给数据库增加一个新的查询时, 都要评估一下, 是不是有索引可以支撑新的查询语句, 如果有必要的话, 需要新建索引来支持新增的查询. 但是, 增加索引付出的代价是, 会降低数据插入, 删除和更新的性能. 增加了索引, 在数据变化的时候, 不仅要变更数据表里的数据, 还要去变更每个索引. 所以, 对于更新频繁并且对更新性能要求较高的表, 可以尽量少建索引. 而对于查询较多更新较少的表, 可以根据查询的业务逻辑, 适当多建一些索引.
分析 SQL 执行计划
在你的 SQL 语句前面加上 EXPLAIN 关键字, 然后执行这个查询语句就可以了.
对于复杂的查询, 最好使用 SQL 执行计划, 事先对查询做一个分析. 在 SQL 执行计划的结果中, 可以看到查询预估的遍历行数, 命中了哪些索引. 执行计划也可以很好地帮助你优化你的查询语句. 例如:
EXPLAIN select * from auth_permission where name like 'Can add%';
EXPLAIN select * from auth_permission where left(name,7) = 'Can add';
优化 SQL
优化 SQL, 提升查询效率. 对于添加的索引列考虑是否会实效的导致全表扫描的情况.
使用慢查询日志分析
MySQL 慢查询日志是排查问题 SQL 语句, 以及检查当前 MySQL 性能的一个重要功能
MySQL 开启慢查询日志
来源: https://www.cnblogs.com/donghaoblogs/p/12822785.html