在空数据库上解释计划MySQL

时间:2018-07-30 19:20:46

标签: mysql mysql-workbench database-performance

我拥有MySQL 5.6(+ Percona工具包)中数据库模式的副本,因为我必须评估应用程序上查询的性能(并报告它们,以便采取措施优化查询/架构) 。此架构(出于安全原因)未填充数据,原始表可能具有100k-10条记录。

我正在对查询运行Explain(使用MySQL Workbench 6.3),但是似乎没有用,因为它没有显示所有分析。示例:连接三个表的(已知工作中的)Select查询的说明显示消息“在读取const表后不可能出现的地方”。

所以,问题是:

  • 在空数据库上运行Explain没用吗?
  • 我如何才能可靠地解释我必须审查的查询?

1 个答案:

答案 0 :(得分:1)

这取决于查询,但是,是的,我经常建议您在表中填充一些示例数据,以获得准确的EXPLAIN报告。

即使您填充了1行,因此避免了“不可能在哪里”注释,这也不够好,因为优化器可能会特别处理行数很少的表。也就是说,优化器知道这样的小表无论如何都将适合存储在单个页面上,并且存储引擎将检索的最小单位是一页,因此它可以执行“表扫描”而不是使用索引,而如果表有几千行,对同一查询使用索引很重要。

您不一定需要用真实的敏感数据填充表格。通常会编写一个脚本来生成与实际数据相似的无意义的数据,足以填满表格以便进行测试。

您不必填充10万行数据即可获得EXPLAIN,从而向您显示与该数据量相同的优化程序计划。如果您可以在表格中填充几百或几千行的人工数据就足够了。