1

我知道,这是一个非常古老的问题,已经被问过好几次了。

当我们有超过 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) ;
4

1 回答 1

1

在没有 LIMIT 或 TOP 运算符的情况下,在 SQL 中没有有效的方法来执行此操作。

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

使用 LINQ 在 .NET 框架上构建的客户端软件可以使用 Take 运算符。

(以上假设根据您的示例对所需维度进行降序排列。)

于 2012-07-17T05:27:35.863 回答