SQL-查找第n个性能更好的最高金额

SQL-查找第n个性能更好的最高金额,sql,Sql,我知道,这是一个很老的问题,已经被问了好几次了 我想写一个性能更好的查询,当我们有超过2亿条记录时,它应该是独立于数据库的 我已经尝试了以下问题 //MYSQL查询类似于支持的Oracle DB的rownum:MYSQL、Oracle、POSTGRESS SELECT RS.amt FROM (SELECT t.amount AS amt, @rownum := @rownum + 1 AS rank FROM salerecord t, (SELECT @row

我知道,这是一个很老的问题,已经被问了好几次了

我想写一个性能更好的查询,当我们有超过2亿条记录时,它应该是独立于数据库的

我已经尝试了以下问题

//MYSQL查询类似于支持的Oracle DB的rownum: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) ;

在SQL中,如果没有LIMIT或TOP运算符,就没有有效的方法来实现这一点

对于允许增量检索结果的系统,您可以通过获取前五条记录并简单地关闭连接来模拟所需的行为

使用LINQ在.NET framework上构建的客户端软件可以使用Take操作符


以上假设根据您的示例按所需维度降序排列。

如果没有限制运算符或顶级运算符,在SQL中没有有效的方法来实现这一点

对于允许增量检索结果的系统,您可以通过获取前五条记录并简单地关闭连接来模拟所需的行为

使用LINQ在.NET framework上构建的客户端软件可以使用Take操作符


以上假设根据您的示例按所需维度降序排列。

如果您希望获得最佳性能,则必须放弃数据库独立性。如果您希望获得最佳性能,则必须放弃数据库独立性。