gpt4 book ai didi

mysql - 避免在查询中进行文件排序

转载 作者:行者123 更新时间:2023-11-30 00:37:51 26 4
gpt4 key购买 nike

我有两个表,posts 和 posts_relationship。

posts:id, title, text, lang, timestamp

posts_relationship: id, post_id, subcategory_id

这是我的查询:

SELECT  posts.title,
posts.timestamp
FROM posts_relationship
INNER JOIN posts ON posts.id = posts_relationship.post_id
WHERE posts.lang = 'it' AND
posts.timestamp <= NOW() AND
posts_relationship.subcategory_id = 21
ORDER BY posts.timestamp DESC

我已在 posts.lang 上添加了索引, posts.timestamp , posts_relationships.post_id ,和posts_relationship.subcategory_id .

但是通过解释我总是使用临时或文件排序。

我怎样才能只有“使用地点”?

最佳答案

我不清楚这条线在做什么:

    posts.timestamp <= NOW() AND 

如何获得 future 的时间戳?

如果没有这一行,查询将如下所示:

SELECT  p.title, p.timestamp
FROM posts_relationship pr INNER JOIN
posts p
ON p.id = pr.post_id
WHERE p.lang = 'it' AND
pr.subcategory_id = 21
ORDER BY p.timestamp DESC;

使用此查询时,posts(lang, timestamp, id) 上的索引可能会阻止文件排序。以下版本的查询可能会进一步确保这一点:

SELECT p.title, p.timestamp
FROM posts p
WHERE p.lang = 'it' AND
exists (select 1
from posts_relationship pr
where p.id = pr.post_id and pr.subcategory_id = 21
)
ORDER BY p.timestamp DESC;

我认为此查询不会使用具有以下两个索引的文件排序:

posts(lang, id, timestamp)
posts_relationship(post_id, subcategory_id)

(顺便说一句,您可以将条件保留在时间戳上,我只是不明白为什么有必要。)

关于mysql - 避免在查询中进行文件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22016367/

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