私は知っています、これは非常に古い質問であり、すでに何度か尋ねられています。
2億を超えるレコードがあり、データベースに依存しない場合に、パフォーマンスが向上するクエリを作成したいと思います。
私は次のクエリを試しました
// MYSQL QUERY simillar TO rownum of Oracle(DBサポート: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をサポートするデータベースで動作し、パフォーマンスは良好です(DBサポート: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) ;