約 50 列のテーブルに約 800 万のレコードがあり、いくつかのレコードを非常に迅速に表示する必要があるため、この目的のために FIRST_ROWS(10) ヒントを使用し、驚くほど高速に動作します。
SELECT /*+ FIRST_ROWS(10) */ ABC.view_ABC.ID, ABC.view_ABC.VERSION, ABC.view_ABC.M_UUID, ABC.view_ABC.M_PROCESS_NAME FROM ABC.view_ABC
ただし、ORDER BY の節、たとえば creationtime (そのテーブルの各行のほぼ一意の値) を配置すると、このクエリはすべての列を返すのに時間がかかります。
SELECT /*+ FIRST_ROWS(10) */ ABC.view_ABC.ID, ABC.view_ABC.VERSION, ABC.view_ABC.M_UUID, ABC.view_ABC.M_PROCESS_NAME FROM ABC.view_ABC ORDER BY ABC.view_ABC.CREATIONTIME DESC
私が気づいたことの1つは次のとおりです。複数の行に同じ値を持つ VERSION のような列に ORDER BY を配置すると、より良い結果が得られます。
これは、このテーブルORDER BY
の列のような一意の列では効率的に機能していません。ID
考慮に値するもう1つのことは次のとおりです。フェッチする列の数を減らすと、たとえば 50 列ではなく 3 列にすると、結果はどういうわけか速くなります。
PS 収集統計はこのテーブルで毎週実行されますが、データは 1 時間ごとにプッシュされます。INSERT
このテーブルではステートメントのみが実行されており、このテーブルではクエリは実行されていDELETE
ません。UPDATE
また、このテーブルなしで作成された単純なビューがあり、上記のクエリは同じビューで実行されています。