我正在优化MySQL数据库中的查询。在使用Visual Explain并查看各种查询成本时,我反复找到反直觉的值。使用更高效查找(例如密钥查找)的操作似乎比表面上效率较低的操作(例如全表扫描或全索引扫描)具有更高的查询成本。
这方面的例子甚至可以在MySQL手册的this page关于Visual Explain的部分中看到: 全表扫描的查询成本只是基于键查找的查询成本的一小部分。我在自己的数据库中看到了完全相同的场景。
所有这些对我来说都是完全倒退的,并提出了这个问题:在优化查询时,我应该将查询成本用作 标准吗?或者我从根本上误解了查询成本?
答案 0 :(得分:1)
MySQL没有与优化相关的非常好的指标。其中一个更好的是EXPLAIN FORMAT=JSON SELECT ...
,但它有点神秘。
一些“严重”缺陷:
LIMIT
。我喜欢这个,因为它让我可以比较两个表格/索引/等,即使是时间紧挨着无用的小表:
FLUSH STATUS;
perform the query
SHOW SESSION STATUS LIKE "Handler%";
它提供精确的计数(不同于EXPLAIN
)读取,写入(临时表)等。它的主要缺陷是无法区分读/写所花费的时间(到期)缓存,索引查找等)。但是,它通常非常擅长指出查询是执行表/索引扫描还是查找与多次扫描。