我要解决的问题:众所周知,并不是所有的开发人员都知道 MySql 中的EXPLAIN是什么,也不是每个人都知道如何使用它。他们中的很大一部分人认为 MySql 是一个黑盒子,无论我写的查询是什么,我都期望最大的响应时间和正确的结果。我想你认识到这种情况。当然,更有经验的开发人员应该对他们进行教育,但我正在寻找最佳实践,以防止在 QA 团队遇到糟糕的、卡住的查询并导致生产环境瘫痪时出现这种情况。
解决方法:我们可能有几种方法,第一种,对下一次部署的代码进行审查。这不是很方便,可能会花费很多时间,但非常有效。第二种,尝试通过查看 slow_logs 来识别 staging 环境中的慢查询,这种方法很简单,但效率不高,staging 上的数据与生产上的数据不同,因此生产上的慢查询完全可以查询分期。
你怎么看,如何防止写得不好,查询慢到生产环境?
pt-query-digest也可用于查看查询 它可以查看慢速日志,将结果保存到运行在 host1 上的 MySQL 服务器中的 test.query_review 表中。有关审查查询的更多信息,请参阅 --review :
pt-query-digest --review h=host1,D=test,t=query_review /path/to/slow.log 文件
使用Show Profiles您还可以查看查询性能
http://dev.mysql.com/doc/refman/5.0/en/show-profiles.html
当 EXPLAIN 与 EXTENDED 关键字一起使用时,输出包括未显示的过滤列。此列指示将按表条件过滤的表行的估计百分比。此外,该语句会产生额外的信息,可以通过在 EXPLAIN 语句之后发出 SHOW WARNINGS 语句来查看这些信息。SHOW WARNINGS 输出中的 Message 值显示优化器如何限定 SELECT 语句中的表名和列名,应用重写和优化规则后 SELECT 的样子,以及可能有关优化过程的其他注释。