gpt4 book ai didi

mysql - 为什么 MySQL 忽略 ORDER BY 上的索引

转载 作者:行者123 更新时间:2023-11-29 12:41:34 26 4
gpt4 key购买 nike

我已经尝试解决这个问题有一段时间了,但没有成功。我在我的小站点上实现了一个简单的队列系统和一个 cron 作业来检查队列中是否有任何项目。它应该获取按优先级排序的多个项目并处理它们,但由于某种原因优先级索引被忽略。我的创建表语法是

CREATE TABLE `site_queue` (
`row_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`task` tinyint(3) unsigned NOT NULL COMMENT '0 - email',
`priority` int(10) unsigned DEFAULT NULL,
`commands` text NOT NULL,
`added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`row_id`),
KEY `task` (`task`),
KEY `priority` (`priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

获取排队项目的查询是

SELECT `row_id`, `task`, `commands` FROM `site_queue` ORDER BY `priority` DESC LIMIT 5;

EXPLAIN 查询返回以下内容:

+----+-------------+------------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE | site_queue | ALL | NULL | NULL | NULL | NULL | 1269 | Using filesort |
+----+-------------+------------+------+---------------+------+---------+------+------+----------------+

任何人都可以提供一些可能导致此问题的见解吗?

最佳答案

因为当它只有几行时(最初是4行,然后增加到1k),没有理由使用索引,因为它会更慢(mysql将不得不多次读取索引和数据页)。

所以 mysql 查询优化的经验法则是:这样做时使用相当大量的数据。如果大小与实际生产数据大小相当,那就太好了。

关于mysql - 为什么 MySQL 忽略 ORDER BY 上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26048592/

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