gpt4 book ai didi

mysql - 为什么 MySQL 在这种情况下使用文件排序?

转载 作者:可可西里 更新时间:2023-11-01 07:05:39 24 4
gpt4 key购买 nike

表结构:

CREATE TABLE IF NOT EXISTS `newsletters` 
(
`id` int(11) NOT NULL auto_increment,
`last_update` int(11) default NULL,
`status` int(11) default '0',
`message_id` varchar(255) default NULL,
PRIMARY KEY (`id`),
KEY `status` (`status`),
KEY `message_id` (`message_id`),
KEY `last_update` (`last_update`)
)
ENGINE=MyISAM DEFAULT CHARSET=latin1;

查询:

SELECT id, last_update
FROM newsletters
WHERE status = 1
ORDER BY last_update DESC
LIMIT 0, 100
  • newsletters 表有超过 300 万条记录
  • 查询需要 26 秒 来执行

查询说明:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1 SIMPLE newsletters range status status 5 NULL 3043354 Using where; Using filesort

那为什么不使用filesort,又怎么是range查询呢?

最佳答案

它使用 filesortlast_update 进行排序。您可以通过将索引更改为 status, last_update 来避免文件排序,因此 MySQL 会以正确的顺序找到状态为 1 的所有行。

要进一步优化,请将索引更改为status, last_update, id。这允许 MySQL 仅通过查看索引来满足查询,而无需查找表。

CREATE INDEX idx_newsletters_status
ON newsletters(status, last_update, id);

关于mysql - 为什么 MySQL 在这种情况下使用文件排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086779/

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