gpt4 book ai didi

mysql - 如何删除这个文件排序?

转载 作者:行者123 更新时间:2023-11-29 12:15:05 25 4
gpt4 key购买 nike

我有问题,我的缓慢查询仍在使用文件排序。我无法摆脱这个额外的标志。你能帮我一下吗?

我的查询如下所示:

select `User`,
`Friend`
from `friends`
WHERE
(`User`='3053741' || `Friend`='3053741')
AND `Status`='1'
ORDER by `Recent` DESC;

解释一下:

http://blindr.eu/stack/1.jpg

我的表结构和索引(它是斯洛伐克语,但应该是相同的):

http://blindr.eu/stack/2.jpg

需要一点帮助,如何摆脱这个文件排序?

最佳答案

USING FILESORT 是否意味着 MySQL 实际上正在使用文件。这个命名有点“不吉利”。只要数据适合内存,排序就在内存中完成。也就是说,看看变量 sort_buffer_size 。但请记住,这是每个 session 的变量。与服务器的每个连接都会分配此内存。

另一种选择当然是在应用程序级别进行排序。无论如何,您都没有 LIMIT 子句。

哦,你的索引太多了。当仅使用最左边的列时,也可以使用组合索引。所以你的一些索引是多余的。

如果性能确实是一个大问题,请尝试另一种方法,因为 WHERE 中的 OR 使得很难(如果不是不可能的话)摆脱 通过索引使用文件排序。尝试这个查询:

SELECT * FROM (
select "this is a user" AS friend_or_user, `User`, Recent
from `friends`
WHERE
`User`='3053741'
AND `Status`='1'

UNION ALL

select "this is a friend",
`Friend`, Recent
from `friends`
WHERE
`Friend`='3053741'
AND `Status`='1'
) here_needs_to_be_an_alias
ORDER by `Recent` DESC

关于mysql - 如何删除这个文件排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29959120/

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