MySQL 5.1 在存在索引时使用 filesort 事件

2024-01-30

也许我错过了一些愚蠢的事情......显然,即使有一个索引与 ORDER BY 子句中的列完全匹配,MySQL 5.1 也会继续执行文件排序。为了将其发布在这里,我过度简化了数据模型,但问题仍然发生:

表定义:

CREATE TABLE `event` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `owner_id` int(11) DEFAULT NULL,
  `date_created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `owner_id` (`owner_id`),
  KEY `date_created` (`date_created`),
  CONSTRAINT `event_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `user_profile` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

我的问题是,一个简单的 SELECT 事件显示“使用文件排序”:

explain select * from event order by date_created desc;

查询结果解释:

id  select_type table   type    possible_keys   key key_len ref rows    Extra   
1   SIMPLE      event   ALL NULL        NULL    NULL    NULL    6       Using filesort

有没有办法让这种类型的查询使用索引而不是进行文件排序?

预先感谢大家。


自从你的CREATE TABLE语句表明您的行数少于 10 行(AUTO_INCREMENT=7)并使用FORCE INDEX在我的安装中将使 MySQL 使用索引,我猜测优化器认为表扫描比索引扫描更快(随机 I/O 更少)(因为您选择了所有列,而不仅仅是date_created)。这通过以下事实得到证实:

mysql> explain select date_created from event order by date_created;
+----+-------------+-------+-------+---------------+--------------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key          | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+--------------+---------+------+------+-------------+
|  1 | SIMPLE      | event | index | NULL          | date_created | 9       | NULL |    1 | Using index |
+----+-------------+-------+-------+---------------+--------------+---------+------+------+-------------+
1 row in set (0.00 sec)

在上面的情况下,索引扫描速度更快,因为只需要返回索引列。

MySQL 文档中有一些使用索引被认为较慢的情况:http://dev.mysql.com/doc/refman/5.1/en/how-to-avoid-table-scan.html http://dev.mysql.com/doc/refman/5.1/en/how-to-avoid-table-scan.html

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

MySQL 5.1 在存在索引时使用 filesort 事件 的相关文章

  • 带有mysql的实体框架,linux和windows之间的表大小写问题

    我们目前正在开发一个使用 Code First Entity Framework 和 Mysql 的产品 开发数据库托管在 Windows 环境中 而生产 mysql 则托管在 Linux 环境中 我遇到的问题是 mysql 中的表命名如下
  • 如何使用 SQLAlchemy 进行“mysql 解释”

    我有一个像这样的sql DBSession query Model filter 我想用这个 sql 来解释SQLAlchemy 你想要将 SQLAlchemy 查询编译为字符串 https docs sqlalchemy org faq
  • Symfony2 - 访问被拒绝(用户未经过完全身份验证)

    我正在使用 Symfony2 开发一个网站 直到今天 登录没有问题 但现在登录时我没有正确验证 Symfony 分析器将我列为logged in as anon而不是我登录的用户 我还被重定向回登录页面而不是目标路径 登录过程由传统的登录表
  • 检索多行最后插入的 id

    当将数据插入具有自动递增 PK 的表时 我需要获取该密钥以在另一个语句中使用 正如许多问题所示 这可以在 PHP 中使用mysql insert id 但是 我一直将插入内容分组在一起 因此一次插入不止一行 我这样做是因为我猜测可能会存在一
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • Mysql使用tenant_id进行复合索引

    我们有一个多租户应用程序 该应用程序有一个包含 129 个字段的表 这些字段都可以在 WHERE 和 ORDER BY 子句中使用 我花了 5 天的时间试图找出最适合我们的索引策略 我获得了很多知识 但我仍然有一些问题 1 创建索引时 我应
  • mysql连接3个表

    如何连接三个具有一个公共列 id 的mysql表 例如 从表1中选择a b 从表2中选择c d 从表3中选择e f 其中id x 谢谢 SELECT t1 a t1 b t2 c t2 d t3 e t3 f FROM table1 t1
  • Python:为什么 IDLE 这么慢?

    IDLE http en wikipedia org wiki IDLE Python 是我最喜欢的 Python 编辑器 它提供了非常漂亮且直观的 Python shell 对于单元测试和调试非常有用 并且还提供了一个简洁的调试器 然而
  • 如何对 numpy 数组进行采样并有效地对每个样本执行计算?

    假设我有一个一维数组 我想要的是使用移动窗口进行采样 并在窗口内将每个元素除以第一个元素 例如 如果我有 2 5 8 9 6 窗口大小为 3 结果将是 1 2 5 4 1 1 6 1 8 1 1 125 0 75 我现在所做的基本上是一个f
  • mysql 扩展已弃用,并将在将来删除:使用 mysqli 或 PDO 代替 [重复]

    这个问题在这里已经有答案了 当我尝试从 PHP 连接到 MySQL 服务器时 我看到以下错误 已弃用 mysql 扩展已弃用 将来将被删除 在第 123 行的 path to filename php 中使用 mysqli 或 PDO 代替
  • 简化 Django 中的表单提交

    我在 Django 中有一个表单 用户可以在其中以单个表单提交文件 图像 文本 如下所示
  • Mysql正则表达式搜索不包含重复字符

    我有一个数据库表 其中包含字典中的单词 现在我想选择字谜词 例如 如果我给出字符串SEPIAN它应该获取像这样的值apes pain pains pies pines sepia etc 为此 我使用了查询 SELECT FROM word
  • Mysql乘法查询

    我有一个名为 产品 的表 其中包含一个名为 价格 的字段 我只想将每种产品的价格加倍 请您帮我提供一条可以在 PHP myAdmin 中运行的 SQL 语句 update products set price price 2
  • 我怎样才能找出MySQL中的默认字符集/排序规则[重复]

    这个问题在这里已经有答案了 我在 Ubuntu 18 04 上使用 MySQL 和 MySQL Workbench 8 0 当我创建字符串类型的列时 我将字符集 排序规则保留为默认值 在 MySQL Workbench 中 它只是告诉我就是
  • 如何格式化字符串以在 Python 中使用 mysqldb 进行查询?

    我该如何正确执行此操作 我想做这样的查询 query SELECT FROM sometable order by s s limit s s conn app globals pool connection cur conn cursor
  • Python 3 urllib 与请求性能

    我正在使用 python 3 5 并且正在检查 urllib 模块与 requests 模块的性能 我用 python 编写了两个客户端 第一个使用 urllib 模块 第二个使用 request 模块 它们都生成二进制数据 我将其发送到基
  • 如何分别用其名称替换逗号分隔的部门 ID?

    我的桌子是这些 员工表 id name department 1 Carrera 1 2 Taylor 1 2 部门表 id name 1 CS 2 IT
  • Mysql:磁盘已满错误

    我的 mysql 服务器有一些问题 120310 6 55 36 ERROR usr libexec mysqld Disk is full writing virtual cdrs MYD Errcode 28 Waiting for s
  • 带有多表查询的 SQL Join 版本的 Djangoviews.py

    需要一些有关 Django 版本的 SQL 多表查询的帮助 该查询使用 3 个表来检索餐厅名称 地址Restaurants table和美食类型来自Cuisinetypes table 所有这些都基于通过 URL 传递的菜品名称 菜品 ID
  • MYSQL枚举:@rownum,奇偶记录

    我问了一个关于为查询结果创建临时 虚拟 ID 的问题 mysql 和 php 查询结果的临时 虚拟 ID https stackoverflow com questions 4063998 mysql php temporary virtu

随机推荐

  • 设计 WPF 地图控件

    我正在考虑在 WPF 中制作一个简单的地图控件 并且正在考虑基本地图界面的设计 并且想知道是否有人对此有一些好的建议 我想到的是使用 ScrollViewer 无滚动条 作为我的 视图端口 然后将所有内容堆叠在画布上 从 Z Index 0
  • `Array.prototype.slice.call` 是如何工作的?

    我知道它是用来做arguments a real Array 但我不明白使用时会发生什么Array prototype slice call arguments 幕后发生的事情是当 slice 通常被调用 this是一个数组 然后它只是迭代
  • 如何在 stackdriver 中针对每个错误创建警报

    创建了基于日志的指标云控制台 https console cloud google com logs metrics 然后我想创建警报 以便每次有新的匹配日志条目时都会触发警报 在尝试创建合适的指标时 最有可能的选项似乎是阈值或变化率 但我
  • fancybox onStart onComplete 状态不起作用

    我正在努力继续工作onStart and onComplete方法使用FancyBox http fancybox net jquery 插件 我似乎无法让它为我工作 你们有人知道我做错了什么吗 这就是我现在正在尝试的 document r
  • 如何重置表中的身份

    我的情况是 我创建表为 id Identity 1 1 not null name varchar 500 category varchar 50 我尝试插入值 显示有 1 sede 糖尿病 结果是 1 2 3 但是当我删除全部内容时 再次
  • Android 中的转义“@”字符

    我正在寻找一种方法来转义 Android strings xml 资源中字符串开头的 符号 我不断收到编译错误 并且 Eclipse 中的布局构建器拒绝工作 有谁知道怎么办 字符景观取决于每个人 android文档提供了这个表https d
  • 如何查看Check Constraint的内容

    是否有一个 SQL 脚本可以让我查看约束的内容 我发现了一个有关 Oracle 的问题 但我需要一个 SQL 脚本 如何在Oracle上查看Check Constraint的内容 https stackoverflow com questi
  • intellij 2020.1 sbt mainRunner 配置

    我正在尝试遵循指示 https github com JetBrains intellij scala wiki 5BSBT 5D How to use provided libraries in run configurations用于设
  • Vue中如何通过Id获取元素?

    我想要一件外衣Element https developer mozilla org en US docs Web API Element在 Vue 中 使用getElementById https developer mozilla or
  • 安装 geoR 包时出现问题

    我刚刚在 Xubuntu 13 10 上安装了 R 和 R studio 版本 3 0 1 我想使用geoR包裹 但是 当我尝试安装它时 出现错误 install packages geoR 将软件包安装到 home R x86 64 pc
  • Java getter 与 this

    这是一个非常通用的场景 我使用 setter 函数设置变量并仅在本地使用该变量 class Main private String str public Main String value setStr value private Stri
  • 如何在 WCF 服务上设置密码?

    我正在开发一个 WCF 服务 我们的其他软件调用该服务将错误信息发送到我们的数据库 问题是 由于它是在线服务 所以它不安全 所以我想知道该服务是否可以请求密码 即当我们调用该服务时 我们必须配置密码或类似的东西 我用谷歌搜索了一下 但对于这
  • 尾递归Map函数RACKET

    Racket 中的映射函数采用一个函数和一个列表 并将该函数递归地应用于列表中的每个项目 我正在尝试将映射转换为尾递归函数 这该如何完成 你被困在哪里了 您可以定义自己的map程序与内部loop程序 define map f in defi
  • 如何在 Jetpack Compose for Desktop 中使用 .svg 文件?

    我正在尝试使用 svg 矢量文件 来显示图像 但我被卡住了 无法做到这一点 有什么办法可以使用它 我尝试像这样使用它 Image imageFromResource svg file name svg contentDescription
  • OpenCV 中从 3D 点构建平面

    我想从 OpenCV 中的 3D 点列表构造一个平面 我想通过查找以下形式的四个参数来获得结果 Ax By Cz D 0 有人会建议我一种方法吗 如果数据不包含异常值且不包含多个平面 此外 所有点都恰好位于一个平面上 数据没有噪声 就这么简
  • 将字典转换为元组列表

    如何以最短的方式将字典转换为元组列表 C Dictionary
  • 达到 MaxLength 时 XAML 触发自动制表符

    当 MaxLength 属性到达 XAML 触发器 DataTrigger PropertyTrigger Style Trigger 等时 如何合并自动制表符 下面是两个这样的选项 说明我如何通过代码隐藏使用 TextBox 完成此操作
  • Spring Boot RabbitMQ 接收器 Jackson 反序列化为 POJO

    我有一个 Spring Boot 项目 我正在尝试与 RabbitMQ 服务器集成 以便我可以向队列发布消息和从队列读取消息 这是我的rabbitmq配置 编辑后仅显示相关详细信息 Configuration ConfigurationPr
  • 运行 NestJS 应用程序时如何查看 console.log 输出?

    我正在构建我的第一个 NestJS 应用程序 我在他们的文档中看到很多使用 console log 的示例 但是当我添加它时 终端中没有输出 我正在使用 vscode 的终端 我还尝试使用内置 Logger 并使用 npm run star
  • MySQL 5.1 在存在索引时使用 filesort 事件

    也许我错过了一些愚蠢的事情 显然 即使有一个索引与 ORDER BY 子句中的列完全匹配 MySQL 5 1 也会继续执行文件排序 为了将其发布在这里 我过度简化了数据模型 但问题仍然发生 表定义 CREATE TABLE event id