2

SQLクエリの制限に問題があります。SQL 2000を使用しているため、のような関数は使用できませんROW_NUMBER(),CTE OR OFFSET_ROW FETCH

私はこのアプローチを試し、Select TOP limit * FROMすでに表示されている結果を除外しましたが、結果クエリが10000を超えるレコードをフェッチすることがあるため、この方法ではクエリが非常に遅くなります。

また、私は次のアプローチを試しました:

SELECT * FROM (
 SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image ,  
 ( SELECT count(DISTINCT i.id) FROM image WHERE i.id<= im.id ) AS recordnum 
 FROM images AS im 
 order by im.location asc, im.name asc) as tmp 
 WHERE recordnum between 5 AND 15 

ここで同じ問題に加えて、レコードumからのサブクエリにORDERオプションを追加できなかったための問題。両方のソリューションをストアドプロシージャに配置しましたが、それでもクエリの実行は非常に遅いです。

だから私の質問は:大量のデータ、つまり10000を超えるデータに対してSQL 2000でページごとに20レコードをプルするようにクエリを制限する効率的な方法はありますか?

ありがとう。

4

2 に答える 2

0

クエリに関しては、優れたパフォーマンスの方法はありません。パフォーマンスが重要であり、データが常に同じようにグループ化/順序付けされる場合は、int列を追加し、グループ化/順序付けに基づいてトリガーごとに値を設定できます。インデックスを作成すると、読み取りが非常に高速になります。書き込みは少し遅くなります。

また、画像と画像のId列にインデックスがあることを確認してください。

于 2013-01-25T13:34:55.033 に答える
0

これで、サブクエリは
im2.idがnullの場合に1回だけ実行され、最初の40行がスキップされます。

SELECT top 25 im1.* 
FROM images im1 
left join ( select top 40 id from images order by id ) im2
on im1.id = im2.id
where im2.id is null
order by im1.id
于 2013-01-25T15:27:51.553 に答える