获取不使用索引的连接的 MySQL 查询列表

Posted

技术标签:

【中文标题】获取不使用索引的连接的 MySQL 查询列表【英文标题】:get MySQL query list of joins that do not use indexes 【发布时间】:2021-03-05 15:23:33 【问题描述】:

我在 phpmyadmin 中看到了这个错误:

不使用索引的连接数

但我从不在我的代码中使用 join。

现在我想得到一个不使用索引的查询列表。

我怎样才能得到这份清单?

我尝试启用慢查询日志,但我无法理解哪个查询没有使用索引。

有人可以指导我吗?

【问题讨论】:

你为什么不在你的代码中使用 join 呢?这似乎受到严重限制。 这看起来不像是一条错误消息,它看起来像是一个统计数据的名称。 大家好,我需要获取不使用索引的连接列表。请帮助获取此列表 您在 phpMyAdmin 中究竟在哪里看到该错误? 在 server_status_advisor.php 中(状态菜单中的顾问选项卡) 【参考方案1】:

没有“不使用索引的连接”列表。

某些管理员查询使用具有JOINsVIEWs;他们可能就是从那里来的。

有效种情况下,JOIN 不使用索引是可以的。一个简单的例子是连接两个表,其中一个表的行太少,以至于索引对性能没有帮助。

慢日志提供了一些更重要的东西——“最差”查询的列表(从性能的角度来看)。任何需要索引的JOIN 的“慢”查询都会显示,即使没有打开该设置。 (我更喜欢关闭该选项,因为它会使慢速日志变得杂乱无章。)

【讨论】:

我没有任何关于加入的查询!【参考方案2】:

我会简单提一下,这不是错误,甚至不是真正的警告。顾问选项卡旨在提供广泛而通用的性能建议,以指导您优化系统。有一些无法修复或不适用于您的情况的建议是很正常的。事实上,我的测试系统对没有索引的连接给出了相同的建议。

正如 Rick James 所暗示的,这些查询可能不是直接来自您编写的代码……一些管理任务可能会触发它(您的操作系统可能会运行一些内务查询,mysql 会针对自身运行一些查询等)。

查看查询的最佳方法是记录它们,Log all queries in mysql 对此进行了回答。您可以使用 phpMyAdmin 中“状态”区域的“处理”子选项卡(非常类似于您进入顾问选项卡的方式)来查看活动查询,但这不会随着时间的推移为您提供完整的画面。获得查询列表后,您可以分析它们以确定是否可以对代码进行改进。

【讨论】:

以上是关于获取不使用索引的连接的 MySQL 查询列表的主要内容,如果未能解决你的问题,请参考以下文章

获取连接范围列表的索引

如何获取当前在我的 MySQL 服务器上运行的所有查询的完整列表? [复制]

多表查询与索引

使用Linq获取列表中对象的索引[重复]

RedisRedis 列表 List 操作 ( 查询操作 | 根据下标获取元素 | 获取列表长度 | 增操作 | 插入值 | 删操作 | 移除值 | 修改操作 | 设置列表指定索引的值 )

MySQL数据库索引详解