2012-04-11 3 views
0

「制限」コマンドは、ウェブサイトのページネーションに使用されています。
DBが結果セットを直線的に越えることなく開始インデックスを見つけることができるのだろうかと思います。sql 'limit'コマンドはどのようにして動作しますか?

たとえば、 '100〜120番目の間にあるものを検索する'の場合、DBは100個のアイテムを直線的に超えないでクエリの100番目のアイテムを見つける方法を持っていますか?

実際に線形検索を行う必要がある場合は、大きなサイトで表示されるページ設定が単純な「制限」コマンドでは実装されていないと思いますか?

+0

私はプロバイダに依存していると思います。 – kosa

答えて

0

具体的な実装について言及することなく、オフセットに基づいて瞬時ルックアップをサポートするデータ構造は確かにあります。整数、構造体、ポインタの通常のC配列(おそらく構造体を指している)について考えてみましょう。

リレーショナルデータベースにはさまざまなキャッシングスキームがあるため、最初のルックアップに時間がかかる場合でも後続のクエリを大幅に高速化できます。

実際の実装では、索引付けされている列に対して常にORDER BYおよびLIMITを指定する必要があります。

+0

ああ、インデックスを使用しても、1000または5000のような大きなLIMITオフセットを使用すると処理が遅くなります。インデックスはBツリーを使用します。 –

+0

コメント(スローフェッチにつながる大きなオフセットについて)と回答(瞬時ルックアップ)が衝突するようです。通常のBツリーインデックス付きカラムでは遅くなるのですか? – eugene

+0

私はそれを「特定の実装について話すことなく」冒頭に書いていましたが、私は、第2要素に到達するのと同じくらい速く、10000番目の要素にジャンプできるデータ構造があることを指摘していました。線形より高速ですが、より深いインデックスの方が遅くなります。 –

関連する問題