機能の説明
この機能は単一テーブルクエリのLIMIT/OFFSETまたはSUM操作をInnoDBにプッシュダウンすることで、照会の遅延を効果的に低下させるものです。
LIMIT/OFFSETをセカンダリインデックスにプッシュダウンする際、この機能によってテーブルからの「リターン」操作が回避され、スキャンコストが効果的に低下します。
SUM操作をInnoDBにプッシュダウンする際、InnoDB層でコンピューティングを行って「最終」の結果を返すことで、Server層とInnoDBエンジン層が「1行ごとに」記録を繰り返すコストを節約します。
サポートするバージョン
LIMIT/OFFSETの最適化に対応するカーネルバージョン MySQL 5.7 20180530
SUM操作のプッシュダウンの最適化に対応するカーネルバージョン MySQL 5.7 20180918
ユースケース
この機能は主に、単一テーブルクエリにLIMIT/OFFSETまたはSUMが存在するケース、例えばSelect *from tbl Limit 10”、“Select* from tbl Limit 10,2、Select sum(c1) from tblなどのステートメントに対応します。
最適化できないケース:
照会ステートメントにdistinct、group by、havingが存在する場合。
ネストの照会が存在する場合。
FULLTEXTインデックスを使用している場合。
order byが存在し、かつオプティマイザがindexを利用してorder byを実装できない場合。
マルチレンジリード(MRR)を使用している場合。
SQL_CALC_FOUND_ROWSが存在する場合。
パフォーマンスデータ
sysbenchに100万行のデータをインポート後:
select * from sbtest1 limit 1000000,1;の実行時間は6.3秒から2.8秒に短縮されました。
select sum(k) from sbtest1;の実行時間は5.4秒から1.5秒に短縮されました。
利用説明
SQLの実行中に、対応する機能制御パラメータのオンオフ状況に基づいて、クエリオプティマイザが自動的に照会実行計画を書き換えることで、コンピューティングプッシュダウンの最適化を行います。
パラメータは次のとおりです。
|
cdb_enable_offset_pushdown | | | | | LIMIT/OFFSETプッシュダウンを制御。デフォルトではオン |
cdb_enable_sumagg_pushdown | | | | | |
説明:
ユーザーは現在、上記パラメータのパラメータ値を直接変更することはできません。変更する場合は、チケットを提出から変更することができます。