【问题标题】:Further information about last_query_cost in MySQL?有关 MySQL 中 last_query_cost 的更多信息?
【发布时间】:2010-11-07 11:41:59
【问题描述】:

在进行查询优化时,SHOW STATUS 查询返回的值通过一些练习和解释易于理解。

last_query_cost 晦涩难懂,文档也很差。

唯一需要解释的是,它必须被解读为一个反男子气概的值:越小越好。

但是我们是否有关于这个高级值的更多信息?它的单位是什么?它是如何计算(估计)的?等等。我们如何将它用于高级分析?

感谢您的宝贵帮助。 :)

【问题讨论】:

  • 记录一下:您可以使用纯 SELECT 查询 more info here 而不是使用 CLI 命令SHOW STATUS LIKE 'Last_query_cost'; 获得相同的信息。如果您不是从 CLI 而是通过在您的应用程序中使用客户端库执行查询并且仍然希望获得 Last_query_cost,则效果很好

标签: mysql optimization profiling


【解决方案1】:

这与 MySQL 查询优化器的工作方式有关。当您输入并执行查询时,MySQL 将构建一个查询计划。这是通过评估如何以几种不同的方式执行查询并将“成本”分配给不同的可能性来完成的。这些成本主要基于内部统计数据,包括表中的行数、不同索引的基数等数据。完成后,MySQL 选择成本最低的计划并执行查询。 last_query_cost 值就是这个成本值。

正如你在manual 中看到的那样:

最后编译的总成本 由查询计算的查询 优化器。这对 比较不同查询的成本 计划相同的查询。默认 值为 0 表示没有查询 还没编译。默认值 为 0。 Last_query_cost 有会话 范围。

确实如此。该值仅用作比较不同查询的定量测量。

如果您想了解更多信息,可以在线获取有关查询优化器的一些有趣资源。不幸的是,我没有任何现成的链接可供您使用,但通过简单搜索“mysql 查询优化器”找到一些资源应该不会太难。

【讨论】:

  • 没错!我找到了这个链接tinyurl.com/myw73d。非常翔实!现在我真的必须练习并理解如何解释这个值,以便在优化时做出正确的决定。 ;) 谢谢你的帮助。 :)
  • High Performance MySQL 是一本我强烈推荐的好书。
【解决方案2】:

This post 听起来它可能只是一个估计,因此不应该依赖于高级分析:

有一件事我没有告诉你 这两个查询是 上次查询成本。那是因为它 显示速度较慢,数据密集型 查询实际上具有较低的成本 比更快的:Last Query Cost 在表重新设计中

Variable_name    Design1       Design2
Last_query_cost  20343.599000  71039.632551

这很奇怪,不是吗?一世 不知道查询费用如何 计算;我相信优化器 实际提前计算 执行查询。绝对是 与实际成本不符 执行这些查询。通常是 更符合真实成本,但 不总是。你不应该依赖它 绝对的。

【讨论】:

  • 这正是我试图调查/理解的案例! :) last_query_cost 似乎更多地基于查询优化器而不是执行。或者可能不是。我无法证明/预测这个 last_query_cost 值(与所有其他指标相比)的事实只告诉我我错过了一块。 :)
  • 奇怪的是,描述这个变量的信息很少,特别是考虑到它是在 MySQL 5 中出现的。也许没有人发现它足够准确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多