MySQL 索引减慢查询速度

2023-11-25

MySQL Server version: 5.0.95
Tables All: InnoDB

我遇到 MySQL 数据库查询问题。基本上我发现如果我索引一个特定的 varchar(50) 字段tag.name,我的查询比不索引字段花费的时间更长(x10)。我正在尝试加快这个查询的速度,但是我的努力似乎适得其反。

罪魁祸首似乎是:

WHERE `t`.`name` IN ('news','home')

我注意到如果我查询tag直接使用相同的条件进行表连接,并且对名称字段进行索引,我没有问题。它实际上按预期工作得更快。

示例查询**


看来article_id是文章表的主键。

由于您按article_id分组,MySQL需要按该列按顺序返回记录,以便执行GROUP BY。

可以看到,如果没有索引,它会扫描article表中的所有记录,但它们至少是按article_id排序的,因此不需要稍后排序。这里可以应用LIMIT优化,因为它已经是有序的,它可以在得到五行后停止。

在 tag.name 上有索引的查询中,它不是扫描整个文章表,而是利用索引,但针对标签表,并从那里开始。不幸的是,执行此操作时,稍后必须按article.article_id 对记录进行排序才能完成GROUP BY 子句。无法应用 LIMIT 优化,因为它必须返回整个结果集,然后对其进行排序,才能获取前 5 行。

在这种情况下,MySQL 只是猜测错误。

如果没有 LIMIT 子句,我猜测使用索引会更快,这可能就是 MySQL 的猜测。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 索引减慢查询速度 的相关文章

随机推荐

  • 如何完全清除 minikube 配置或将 IP 重置回 192.168.99.100

    我想彻底清除 Minikube 这样我就可以像第一次安装它一样重新开始 以避免一些配置冲突 Mailnly 的初始 IP 为 192 168 99 100 不幸的是它会在接下来的时间里增加minikube start到192 168 99
  • QAudioDeviceInfo 在 Ubuntu 上找不到默认音频设备

    我正在尝试运行基本示例QAudioDeviceInfo 类参考 但 Qt 未找到默认音频设备 运行此代码没有显示任何输出 foreach const QAudioDeviceInfo deviceInfo QAudioDeviceInfo
  • 使用 Array 对象作为 ES6 Map 的键

    我正在尝试将我的代码更新到 ES6 因为我正在使用 Node 4 0 并且到目前为止非常喜欢它的功能 但是我对新的 ES6 有问题Map数据结构 因为它的行为不同 使用时Array作为钥匙 我用它作为柜台地图 我运行这段代码 我想知道如何使
  • 在 VS 2022 中打开 .net Framework 4.5 项目。有什么解决方法吗?

    无论如何可以打开并工作吗 net framework 4 5项目于visual studio 2022 问题可能不在于 VS2022 而是在于 net framework 4 5开发人员包不再可用 我的项目无法更改目标版本 有什么解决方法吗
  • 如何在 vue.js 中转义大括号

    I have data in my database可能包含花括号 inside app blade php div code div data div code div 因此 如果我想向用户显示该数据 如果它位于 Vue 应用程序内 则会
  • 如何在没有 JAXBElement 包装器的情况下 JSON 编组 JAXBElement 包装的响应?

    我有一个使用 Spring v4 0 5 的 http 服务 它的 http 端点是使用 Spring Web MVC 配置的 响应是根据模式生成的 JAXB2 注解类 响应包含在JAXBElement因为生成的 JAXB 类不运行 Xml
  • Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。错误

    我想用 Jitpackio 发布一个库 当我发布库时 出现以下错误 Failed to apply plugin com android internal application Android Gradle plugin requires
  • Vim:暂时仅显示特定行

    有时 在 Vim 中 我想仅显示文件的特定部分 例如 特定方法 同时隐藏其余部分 这有助于我专注于手头的问题 我想这样做而不实际更改文件 关于如何做到这一点有什么想法吗 欢呼和问候 克拉斯 Similar to the already me
  • 将 C 预处理器转换为 Rust

    我正在将一些 C 代码移植到 Rust 该代码包含很多类似这样的内容 define CONFIG FLAG NUMBER 23 1 define THIS 10 define THAT 11 define THIS AND THAT THI
  • Doctrine2 实体命名空间

    我是 Doctrine2 的新手 想知道如何告诉 Doctrine 我的实体使用哪个命名空间 我当前的配置is this 我的所有实体都位于名称空间 project entity 中 所以 每次我想获取实体 Color 时 我都必须写 em
  • 以特殊格式打印当前 UTC 日期时间

    很简单 但我是 python 新手 我正在尝试以特殊格式打印当前 UTC 日期和时间 Python 2 6 6 import datetime time print time strftime a b d H M S Z Y datetim
  • Inno Setup RegKey存在于64位系统上

    我使用 Inno Setup 创建了一个安装程序 并想使用 Pascal Script 查询注册表 if RegKeyExists HKEY LOCAL MACHINE SOFTWARE Classes Installer UpgradeC
  • 如何在 Flutter 中获取“Ap​​ps Instance Id”

    我想设置Firebase 应用内消息传递在我的扑动应用程序上 首先 它需要FirebaseInstanceId正如所解释的here 这样我就可以测试向我的设备发送消息 然而该文档并没有详细说明如何在 Android 上获取它 尤其是在 fl
  • 删除级联时的 MongoDB DBRef

    MongoDB 有没有办法让外键具有 ON DELETE CASCADE 功能 我知道您可以使用 DBRef 作为一种外键 但是当删除引用指向的集合中的项目时 引用将返回 null 但我希望引用所属的项目被删除 我该怎么做呢 或者我每次删除
  • 错误 1114 (HY000):表“XXX”已满

    我知道这个问题以前被问过 但似乎没有任何帮助 我在 2 3 天前遇到了这个问题 询问服务器支持 他们告诉我必须将 mysql 从 var 移动到 home 那里是我所有的磁盘空间 这就是我所做的 然后我运行插入 一切都很顺利 直到今天 当我
  • 无法在 PDF 中保存阿拉伯语单词 - PDFBox Java

    正在尝试保存Arabic可编辑 PDF 中的单词 它工作得很好English但是当我使用阿拉伯语单词时 我遇到了这个异常 java lang IllegalArgumentException U 0627 在此字体 Helvetica 编码
  • ASP.Net MVC 3.0 Ajax.BeginForm 正在重定向到页面?

    在 ASP Net MVC 3 0 中我使用 Ajax Beginform 并点击 JsonResult 表单成功后我将调用 jQuery 函数 但由于某种原因我的表单重定向到 JsonAction my View using Ajax B
  • Delphi XE中占用大量内存的TStringList对象

    我正在开发一个模拟程序 该程序首先要做的事情之一是读取一个大文件 28 MB 大约 79 000 行 解析每一行 大约 150 个字段 为该对象创建一个类 并将其添加到 TStringList 它还读取另一个文件 该文件在运行期间添加更多对
  • Volley 库请求队列的最大大小是多少

    我在用VolleyAndroid 中的库 我想知道允许使用的队列的最大大小是多少Volley图书馆 我没有发现与此相关的任何内容 据我所知 您需要将网络请求添加到队列中 但我不知道可以将其并行队列的最大大小是多少 RequestQueue
  • MySQL 索引减慢查询速度

    MySQL Server version 5 0 95 Tables All InnoDB 我遇到 MySQL 数据库查询问题 基本上我发现如果我索引一个特定的 varchar 50 字段tag name 我的查询比不索引字段花费的时间更长