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

ApsaraDB for SelectDB:クエリの高速化

最終更新日:Apr 11, 2025

ApsaraDB for SelectDB は、Nereids オプティマイザーと Pipeline 実行エンジンを使用して、クエリを自動的に最適化します。高パフォーマンス クエリの要件を満たすために、クエリを手動で最適化できます。たとえば、インデックスベースの高速化、高並列ポイントクエリ、マテリアライズドビュー、および結合の最適化を使用できます。

自動クエリ最適化計画

SelectDB では、Nereids オプティマイザーと Pipeline 実行エンジンは、クエリ最適化フェーズと実行フェーズでディープ最適化に使用できるコア クエリ処理テクノロジーです。これらのテクノロジーは、複雑なクエリのパフォーマンスとリソース使用量を大幅に改善します。次の図は、SelectDB でこれらのテクノロジーが SQL 文をどのように最適化するかを示しています。

次の表は、各テクノロジーの主な機能について説明しています。詳細については、関連ドキュメントをご参照ください。

テクノロジー

機能の説明

Nereids

  • 複数レベルのネストされたサブクエリや複数テーブル結合クエリなどの複雑なクエリをサポートします。

  • 最適化ルールにおける論理エラーの可能性を低減します。

Pipeline 実行エンジン

  • CPU 使用率を向上させます。

  • 大規模クエリと小規模クエリ間のリソース競合を軽減します。

手動クエリ最適化

SelectDB の Nereids オプティマイザーと Pipeline 実行エンジンがクエリの要件を満たしていない場合は、統計 を使用してクエリデータを分析し、適切なポリシーを選択してクエリを最適化できます。

最適化ポリシー

シナリオ

制限

高並列ポイントクエリ

高並列ポイントクエリを最適化する場合。

説明

ポイントクエリとは、特定の条件を満たす少量のデータをデータベースから取得することです。ほとんどの場合、プライマリキーまたはカーディナリティの高い列を使用して取得を実行します。

  • 行ストレージモードを有効にすると、追加のストレージが消費されます。

  • PreparedStatement は、プライマリキーベースのポイントクエリのみをサポートします。

マテリアライズドビュー

反復的で時間のかかる複雑なクエリを最適化する場合。

  • 一意キーモデルを使用するテーブルでは、マテリアライズドビューを使用して列の順序を変更できますが、集計関数として使用することはできません。そのため、粗粒度の集約操作を実行するために、一意キーモデルを使用するテーブルのマテリアライズドビューを作成することはできません。

  • テーブルに過剰な数のマテリアライズドビューが作成されると、データ インポート効率に影響します。

詳細については、「制限」をご参照ください。

インデックスベースの高速化

あらゆるシナリオでデータをすばやくクエリまたは配置する場合。

制限は、インデックスの種類によって異なります。詳細については、「インデックスベースの高速化」をご参照ください。

バケット シャッフル結合

結合クエリを最適化する場合。

結合条件には左テーブルの分散列が含まれている必要があり、左テーブルは実行中に単一パーティションのデータのみを使用します。

コロケーション結合

結合クエリを最適化する場合。

結合条件には左テーブルの分散列が含まれている必要があり、左右のテーブルは同じコロケート グループに属している必要があります。

ランタイム フィルター

大きなテーブルと小さなテーブルを結合するプロセスを最適化する必要があるシナリオ。

ランタイム フィルターを使用する場合、JOIN 文は次の要件を満たしている必要があります。

  • 左テーブルは大きく、右テーブルは小さい。 ランタイム フィルターを作成する場合、メモリ オーバーヘッドなどの計算コストを想定する必要があります。

  • 結合結果セットのサイズが小さい。 結果セットのサイズが小さいということは、JOIN 文によって左テーブルのデータの大部分が除外されることを示しています。

ビットマップベースの正確な重複排除

  • 重複排除結果が正確である必要があり、数百万のデータ レコードが関係するシナリオ。

  • ストレージ リソースが十分にあるシナリオ。

  • データ型の制限:

    • TINYINT、SMALLINT、INT、および BIGINT 型の整数は直接使用できます。

    • 文字列などの非整数は、グローバル辞書を使用して整数にマッピングされた後に使用できます。これにより、メンテナンス コストが増加します。

  • メモリの制限:データ カーディナリティが高い場合 (数十億のデータ レコードなど)、ビットマップは大きなビット配列を格納する必要があります。これにより、メモリ使用量が大幅に増加し、メモリ リソースが不足する可能性があります。

HLL 機能を使用した近似重複排除

  • 数十億のデータ レコードなどの大量のデータを処理する必要があり、結果に特定の誤差範囲 (不正確な分析メトリック値など) が許容されるシナリオ。

  • 分散システムで効率的な結果のマージが必要なシナリオ。

  • 精度の低下:正確な結果は得られません。エラー率は、データ カーディナリティが増加するにつれて減少します。たとえば、データ カーディナリティが高いほど、エラー率は相対的に低くなります。

  • 適切なパラメーター構成:HyperLogLog (HLL) の精度は、レジスタ数やハッシュ ビット数を指定するパラメーターなどによって決まります。不適切なパラメーター設定は、結果の精度に影響を与える可能性があります。