1

私は知っています、これは非常に古い質問であり、すでに何度か尋ねられています。

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) ;
4

1 に答える 1

1

LIMITまたはTOP演算子がない場合、SQLでこれを行う効率的な方法はありません。

結果の増分取得を可能にするシステムの場合、最初の5つのレコードをフェッチし、接続を閉じるだけで、必要な動作をシミュレートできます。

LINQを使用して.NETFramework上に構築されたクライアントソフトウェアは、Take演算子を使用できます。

(上記は、例ごとに必要なディメンションのランクが下がることを前提としています。)

于 2012-07-17T05:27:35.863 に答える