SQL - 找到性能更好的第 n 个最高金额
Posted
技术标签:
【中文标题】SQL - 找到性能更好的第 n 个最高金额【英文标题】:SQL - Find nth Highest Amount with better performance 【发布时间】:2012-07-17 05:21:44 【问题描述】:我知道,这是一个很老的问题,已经问了好几次了。
当我们有超过 2 亿条记录时,我想编写性能更好的查询,并且应该独立于数据库..
我尝试过以下查询
// mysql QUERY simillar TO rownum of Oracle (DB Supported: MYSQL, ORACLE, POSTGRESS)
SELECT RS.amt
FROM
(SELECT t.amount AS amt,
@rownum := @rownum + 1 AS rank
FROM salerecord t,
(SELECT @rownum := 0) r
ORDER BY t.amount DESC LIMIT 5) RS
WHERE RS.rank=5
//支持LIMIT的数据库,性能好(支持的数据库:MYSQL,Postgres)
SELECT amount FROM salerecord ORDER BY amount DESC LIMIT 4, 1;
//适用于几乎所有数据库,但性能不佳
SELECT amount FROM salerecord a WHERE 5 = (SELECT COUNT(*) FROM salerecord b WHERE a.amount <= b.amount) ;
【问题讨论】:
如果您正在寻找***性能,您将不得不放弃数据库独立性。 【参考方案1】:在没有 LIMIT 或 TOP 运算符的情况下,在 SQL 中没有有效的方法来执行此操作。
对于允许增量检索结果的系统,您可以通过获取前五条记录并简单地关闭连接来模拟所需的行为。
使用 LINQ 在 .NET 框架上构建的客户端软件可以使用 Take 运算符。
(以上假设根据您的示例对所需维度进行降序排列。)
【讨论】:
以上是关于SQL - 找到性能更好的第 n 个最高金额的主要内容,如果未能解决你的问题,请参考以下文章