gpt4 book ai didi

SQL 查询总是使用 filesort in order by 子句

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:27 24 4
gpt4 key购买 nike

我正在尝试优化使用 order by 子句的 sql 查询。当我使用 EXPLAIN 时,查询总是显示“使用文件排序”。我正在将此查询应用于一个群组讨论论坛,其中有用户附加到帖子的标签。

这是我正在使用的 3 个表:users、user_tag、tags

user_tag是用户和标签的关联映射表。

CREATE TABLE `usertable` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`user_name`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `user_tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`tag_id` int(11) unsigned NOT NULL,
`usage_count` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `tag_id` (`tag_id`),
KEY `usage_count` (`usage_count`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我使用编程更新服务器端的 usage_count。这是给我问题的查询。查询是找出特定用户名的 tag_id 和 usage_count,按使用次数降序排列

select user_tag.tag_id, user_tag.usage_count
from user_tag inner join usertable on usertable.user_id = user_tag.user_id
where user_name="abc" order by usage_count DESC;

这是解释输出:

mysql> explain select
user_tag.tag_id,
user_tag.usage_count from user_tag
inner join usertable on
user_tag.user_id = usertable.user_id
where user_name="abc" order by
user_tag.usage_count desc;

Explain output here

我应该改变什么才能失去“使用文件排序”

最佳答案

我对这个很生疏,但这里是。

The key used to fetch the rows is not the same as the one used in the ORDER BY:

http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

正如 OMG Ponies 所提到的,user_id 和 usage_count 上的索引可以解决文件排序问题。

KEY `user_id_usage_count` (`user_id`,`usage_count`)

关于SQL 查询总是使用 filesort in order by 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225425/

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