gpt4 book ai didi

php - 如果 BETWEEN 不可用,用什么代替 LIMIT x, y?分页

转载 作者:行者123 更新时间:2023-11-29 04:58:59 26 4
gpt4 key购买 nike

我有 10k 个论坛主题。我运行这个查询:

  SELECT * 
FROM `topics`
WHERE category_id = '2'
ORDER BY `last_message` DESC
LIMIT 2990, 10

这会检查所有行!所有行!即使在将索引添加到 last_message 之后。 last_message 是一个 time(),我想按降序排列所有消息。那么,你有什么建议?不幸的是,没有 BETWEEN,因为它不能用它来完成。

最佳答案

由于您在 category_id 上有过滤条件,因此 last_message 上的索引很可能对您没有太大帮助。

查询必须遍历索引并过滤 category_id = 2 的记录。由于遍历索引比扫描表更昂贵,filesort 可能是更有效的解决方案,并且 MySQL 可能更喜欢它而不是索引扫描(这很可能是什么你的情况正在发生)。

此外,正如 @OMG Ponies 指出的那样,MySQL 无法进行后期行查找。

假设你的 PRIMARY KEY 列被称为 id,你需要在 (category_id, last_message, id) 上创建一个索引并重写您的查询如下:

SELECT  t.*
FROM (
SELECT id
FROM topics
WHERE category_id = 2
ORDER BY
category_id DESC, last_message DESC, id DESC
LIMIT 2990, 10
) q
JOIN topics t
ON t.id = q.id

关于php - 如果 BETWEEN 不可用,用什么代替 LIMIT x, y?分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710143/

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