0

range 内の主キーを持つすべての行を取得するために、負荷の高い大きなテーブル (10 億行になる可能性がある) で範囲スキャンを効率的に実行することは可能ですか? 主キーはBIGINT型です。行は非常に短くINT、主キー以外のもう 1 つのフィールドです。このテーブルでは、このタイプのクエリのみが実行されます。

とにかく、そのようなクエリまたはテーブルを最適化するには? 範囲スキャンが簡単になるように、常にソートされた行を保存できますか??

大きなテーブルで優れたパフォーマンスでそのようなクエリを実行することはまったく可能ですか?

4

1 に答える 1

1

主キー列は自動的に索引付けされるため、範囲へのアクセスは非常にうまく機能するはずです。条件を使用しBETWEENます。

select * from mytable
where id between ? and ?

もちろん、範囲が大きい場合、膨大な数の行が返されるため、単純にパフォーマンスが低下します。

また、範囲のサイズが特定の制限を超えている場合 (オプティマイザーが決定しますが、通常は合計行の 1/11)、インデックスは使用されず、代わりに完全な tale スキャンが実行されます。アクセスされる行のパーセンテージが十分に大きい場合はインデックス。

疑問がある場合はEXPLAIN、クエリで を実行して、アクセスがどのように行われているかを示します。インデックスを使用している場合、可能な限り高速である可能性があります。

于 2013-08-23T04:10:50.573 に答える