すべてのプロダクト
Search
ドキュメントセンター

Tablestore:コンピューティングプッシュダウン

最終更新日:Feb 15, 2025

多次元インデックスは、条件付きフィルタリング、集約、ソートなどの機能をサポートしています。 多次元インデックスを作成すると、システムは多次元インデックスの計算機能を最大限に活用し、一部の 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 ...

演算子のプッシュダウンは、データ列と定数の比較に対してのみサポートされています。 データ列間の比較では、演算子のプッシュダウンはサポートされていません。

SELECT * FROM exampletable WHERE a > 1;  /* 演算子のプッシュダウンは、データ列と定数の比較に対してサポートされています。 */
SELECT * FROM exampletable WHERE a > b;  /* 演算子のプッシュダウンは、データ列間の比較に対してはサポートされていません。 */

集計関数

  • 基本集計: MIN、MAX、COUNT、AVG、SUM、および ANY_VALUE

  • 重複排除と集計: COUNT(DISTINCT col_name)

  • グループ化: GROUP BY col_name

集計関数は、すべてのデータまたは GROUP BY グループのデータを集計できます。 演算子のプッシュダウンは、集計関数がプッシュダウンをサポートし、関数パラメーターがデータ列である場合にのみサポートされます。

SELECT COUNT(*) FROM exampletable;           /* 演算子のプッシュダウンは、COUNT(*) の特別な使用方法でサポートされています。 */
SELECT SUM(a) FROM exampletable;             /* 演算子のプッシュダウンは、関数パラメーターがデータ列である場合にサポートされます。 */
SELECT a, b FROM exampletable GROUP BY a, b; /* 演算子のプッシュダウンは、データ列によるグループ化でサポートされています。 */
SELECT a FROM exampletable GROUP BY a+1;     /* 演算子のプッシュダウンは、式によるグループ化ではサポートされていません。 */
SELECT SUM(a+b) FROM exampletable;           /* 演算子のプッシュダウンは、関数パラメーターが式である場合にサポートされません。 */

LIMIT

  • LIMIT row_count

  • ORDER BY col_name LIMIT row_count

演算子のプッシュダウンは、ORDER BY 句のパラメーターがデータ列である場合にのみサポートされます。

SELECT * FROM exampletable ORDER BY a LIMIT 1;     /* 演算子のプッシュダウンは、データ列によるソートでサポートされています。 */
SELECT * FROM exampletable ORDER BY a, b LIMIT 1;  /* 演算子のプッシュダウンは、データ列によるソートでサポートされています。 */
SELECT * FROM exampletable ORDER BY a+1 LIMIT 1;   /* 演算子のプッシュダウンは、式によるソートではサポートされていません。 */