gpt4 book ai didi

MySQL 在有限制的大表上按主键优化排序

转载 作者:行者123 更新时间:2023-11-30 01:18:12 25 4
gpt4 key购买 nike

抱歉标题含糊不清...我的问题:

我有一个 mysql 查询,其最简化的形式如下所示:

SELECT * FROM table 
WHERE _SOME\_CONDITIONS_
ORDER BY `id` DESC
LIMIT 50

如果没有 LIMIT 子句,查询将返回大约 50,000 行,但我只对前 50 行感兴趣。现在我意识到,因为我添加了 ORDER BY 位,MySQL 必须创建一个临时表并将所有结果加载到其中,然后对 50,000 个结果进行排序,然后才能返回前 50 个结果。

当我比较此查询与没有 ORDER BY 的查询的性能时,我发现 1.8 秒与 0.02 秒的惊人差异。

鉴于 id 是自动递增主键,我认为应该有一个优雅的解决方案来解决我的问题。有吗?

最佳答案

SOME_CONDITIONS 是否允许您为查询提供 ID 范围?至少,您可以限制在排序之前添加到临时表中的行数。

例如:

SELECT * FROM table 
WHERE _SOME\_CONDITIONS_
AND id BETWEEN 1 AND 50;

或者,如果SOME_CONDITIONS阻止您对结果中的 ID 范围做出此类假设,则可以使用嵌套查询来给出最小和最大 ID。

如果性能真的那么重要,我会通过创建另一个表或前 50 个结果的缓存并单独更新来对数据进行非规范化。

关于MySQL 在有限制的大表上按主键优化排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838384/

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