查询是否是MySQL查询优化的最佳指标?

时间:2017-08-17 16:25:21

标签: mysql query-optimization

我正在优化MySQL数据库中的查询。在使用Visual Explain并查看各种查询成本时,我反复找到反直觉的值。使用更高效查找(例如密钥查找)的操作似乎比表面上效率较低的操作(例如全表扫描或全索引扫描)具有更高的查询成本。

这方面的例子甚至可以在MySQL手册的this page关于Visual Explain的部分中看到: enter image description here 全表扫描的查询成本只是基于键查找的查询成本的一小部分。我在自己的数据库中看到了完全相同的场景。

所有这些对我来说都是完全倒退的,并提出了这个问题:在优化查询时,我应该将查询成本用作 标准吗?或者我从根本上误解了查询成本?

1 个答案:

答案 0 :(得分:1)

MySQL没有与优化相关的非常好的指标。其中一个更好的是EXPLAIN FORMAT=JSON SELECT ...,但它有点神秘。

一些“严重”缺陷:

  • 很少有任何内容可以解释为LIMIT
  • 指数的统计数据是粗略的,不允许分布不均。 (直方图即将推出。)
  • 关于数据/索引当前是否已缓存,关于您是否拥有旋转驱动器或SSD,没有做什么。

我喜欢这个,因为它让我可以比较两个表格/索引/等,即使是时间紧挨着无用的小表:

FLUSH STATUS;
perform the query
SHOW SESSION STATUS LIKE "Handler%";

它提供精确的计数(不同于EXPLAIN)读取,写入(临时表)等。它的主要缺陷是无法区分读/写所花费的时间(到期)缓存,索引查找等)。但是,它通常非常擅长指出查询是执行表/索引扫描还是查找与多次扫描。