gpt4 book ai didi

MySQL EXPLAIN - 它每次都给我不同的解释

转载 作者:行者123 更新时间:2023-11-29 01:02:54 29 4
gpt4 key购买 nike

我有一个非常大、复杂的查询,我正在尝试使用 MySQL EXPLAIN SELECTEXPLAIN EXTENDED SELECT 进行优化。

如果我针对查询运行它,我会看到查询中的每个表都在 Extra 列中使用 Using where,这很棒。

根本不会更改任何数据,我会去泡杯茶什么的,回来重新运行 EXPLAIN

这一次,仅仅几分钟后,只有 20% 的表是 Using where,主表现在是 Using index;使用临时的;使用 filesort,我的一天变成了试图调试它的噩梦。

我知道有时像临时表和文件排序这样的东西比使用 where 子句和索引更有效。但对于这个大小为 10GB 的数据库,创建临时表和文件排序会完全杀死服务器。

知道为什么会发生这种情况吗?这样的事情背后有逻辑或原因吗?!

最佳答案

您正在使用 InnoDB,对吗?您使用的是 5.6.6 之前的版本,对吗?

您遇到了一个关于 InnoDB 缺乏“持久统计”的有趣变体。用于触发重新计算 InnoDB 表的统计信息的几件事。这些统计信息用于决定如何执行查询。

可能您的特定查询“悬而未决”——某些统计数据的微小变化会导致不同的查询计划。

如果您愿意,我们可以深入挖掘。但我们需要看到

  • 显示创建表
  • SHOW TABLE STATUS(表格大小的线索)
  • EXPLAIN EXTENDED SELECT...
  • EXPLAIN FORMAT=JSON SELECT...(5.6.5 或更高版本)

而且我们可能会建议加快查询速度的方法。

关于MySQL EXPLAIN - 它每次都给我不同的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29276775/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com