多次元インデックスは、条件付きフィルタリング、集約、ソートなどの機能をサポートしています。 多次元インデックスを作成すると、システムは多次元インデックスの計算機能を最大限に活用し、一部の SQL コンピューティングタスクを実行するために多次元インデックスにプッシュダウンできます。 これにより、全表スキャンが不要になり、計算効率が向上します。
多次元インデックスの詳細については、「多次元インデックス」をご参照ください。
シナリオ
多次元インデックスに SQL 文に含まれるデータ列が含まれている場合、SQL エンジンは多次元インデックスを使用してデータを読み取り、多次元インデックスでサポートされている演算子をプッシュダウンします。 たとえば、exampletable という名前のテーブルには、列 a、b、c、および d が含まれています。 テーブルの多次元インデックスには列 a、b、および c が含まれており、これらの列にはインデックスが付けられています。 SQL 文に列 a、b、および c のみが含まれている場合、SQL エンジンは多次元インデックスを使用してデータを読み取ります。
SELECT a, b, c, d FROM exampletable; /* 多次元インデックスには列 a、b、c、および d は含まれていません。 SQL エンジンはテーブル全体をスキャンしてデータを読み取り、演算子をプッシュダウンしません。 */
SELECT a, b, c FROM exampletable; /* 多次元インデックスには列 a、b、および c が含まれています。 SQL エンジンは多次元インデックスを使用してデータを読み取り、演算子をプッシュダウンします。 */使用上の注意
SQL 文の WHERE 句の式が実際のフィールド型と一致しない場合、式を多次元インデックスにプッシュダウンすることはできません。 これにより、SQL 文の全体的な実行効率が低下します。
たとえば、フィールド a および b のデータ型が BIGINT であるとします。 WHERE 句が WHERE a = '123' and b = 234 の場合、式に暗黙的な CAST 操作が含まれているため、a = '123' を多次元インデックスにプッシュダウンすることはできません。 b = 234 のみが多次元インデックスにプッシュダウンされます。 WHERE 句全体を多次元インデックスにプッシュダウンするには、WHERE 句を a = 123 and b = 234 に変更します。
前提条件
多次元インデックスが作成されていること。 詳細については、「多次元インデックスの作成」をご参照ください。
マッピングテーブルが作成されていること。 詳細については、「テーブルのマッピングテーブルの作成」または「多次元インデックスのマッピングテーブルの作成」をご参照ください。
プッシュダウンできる演算子
次の表に、SQL 文で実行するために多次元インデックスにプッシュダウンできる演算子を示します。
種類 | 演算子 | プッシュダウンの制限 |
論理演算子 | AND および OR | NOT 演算子はプッシュダウンできません。 |
関係演算子 | =、!=、<、<=、>、>=、および BETWEEN ... AND ... | 演算子のプッシュダウンは、データ列と定数の比較に対してのみサポートされています。 データ列間の比較では、演算子のプッシュダウンはサポートされていません。 |
集計関数 |
| 集計関数は、すべてのデータまたは GROUP BY グループのデータを集計できます。 演算子のプッシュダウンは、集計関数がプッシュダウンをサポートし、関数パラメーターがデータ列である場合にのみサポートされます。 |
LIMIT |
| 演算子のプッシュダウンは、ORDER BY 句のパラメーターがデータ列である場合にのみサポートされます。 |