在使用 Microsoft SQL Server 时,我发现 SQL Server Profiler 和 Estimated Execution Plan(在 Management Studio 中可用)在开发和生产系统监控期间优化查询非常有用。
是否有可用于 MySQL 的类似工具(开源或商业)或技术?
您可以使用 获取有关如何执行查询的信息EXPLAIN
。
例如:
EXPLAIN SELECT * FROM foo INNER JOIN bar WHERE foo.index = 1 AND bar.foo_id = foo.id
然后它会告诉您将使用哪些索引,表将按什么顺序连接,它希望从每个表中选择多少行等等。
正如 RoBorg 建议的那样,您可以使用 EXPLAIN 来显示 MySQL 将如何执行您的查询的详细信息。我发现这篇文章更有用,因为它告诉您如何解释结果并改进您的 SQL。
这些关于查询缓存配置和使用 ALTER TABLE添加和删除索引的文章也很有帮助。
您也可以查看http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#statvar_Last_query_cost。这将有助于了解查询是否更好,就 CPU 周期或表扫描而言。
SHOW STATUS LIKE 'Last_query_cost';