gpt4 book ai didi

mysql - 优化查询而不是使用 order by

转载 作者:行者123 更新时间:2023-11-29 04:13:21 24 4
gpt4 key购买 nike

我想运行一个简单的查询来获取表中最旧的“n”条记录。 (它有一个 creation_date 列)。

如果不使用“order-by”,我怎么能得到它呢?这是一个非常大的表,对整个表使用 order by 只得到“n”条记录并不那么令人信服。

(假设 n << 表的大小)

最佳答案

当您关心性能时,您可能不应该过早放弃使用 order by。

这样的查询可以作为由适当索引支持的 Top-N 查询来实现,它运行得非常快,因为它不需要对整个表进行排序,甚至不需要对选择的行进行排序,因为数据已经在索引。

例子:

select *
from table
where A = ?
order by creation_date
limit 10;

如果没有适当的索引,如果你有很多数据,它会很慢。但是,如果您创建这样的索引:

create index test on table (A, creation_date );

查询将能够以正确的顺序开始获取行,无需排序,并在达到限制时停止。

Recipe:将 where 列放在索引中,然后按列排序。

如果没有where子句,就把order by放到索引里。 order by 必须匹配索引定义,尤其是在存在混合的 asc/desc 顺序时。

带索引的 Top-N 查询是性能之王——确保使用它们。

我有几个链接供进一步阅读(都是我的):

How to use index efficienty in mysql query

http://blog.fatalmind.com/2010/07/30/analytic-top-n-queries/ (以 Oracle 为中心)

http://Use-The-Index-Luke.com/ (尚未涵盖 Top-N 查询,但将在 2011 年推出)。

关于mysql - 优化查询而不是使用 order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4601323/

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