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

ApsaraDB for SelectDB:クエリ高速化の概要

最終更新日:Jul 09, 2026

ApsaraDB for SelectDB は、Nereids オプティマイザーとパイプライン実行エンジンを使用してクエリを自動的に最適化します。高性能なクエリの要件を満たすために、手動でクエリを最適化することもできます。たとえば、インデックスによる高速化、高同時実行ポイントクエリ、マテリアライズドビュー、JOIN 最適化を使用できます。

自動クエリ最適化プランニング

SelectDB では、Nereids オプティマイザーとパイプライン実行エンジンはクエリ処理の中核技術であり、クエリ最適化フェーズと実行フェーズで深い最適化に使用できます。これらの技術により、複雑なクエリのパフォーマンスとリソース使用量が大幅に改善されます。次の図は、これらの技術が SelectDB の SQL ステートメント をどのように最適化するかを示しています。

image

次の表に、各技術の主な機能を示します。詳細については、関連ドキュメントをご参照ください。

技術

機能の説明

Nereids

  • 多段にネストしたサブクエリや複数テーブルの JOIN クエリなどの複雑なクエリをサポートします。

  • 最適化ルールにおけるロジックエラーの可能性を低減します。

パイプライン実行エンジン

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

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

手動クエリ最適化

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

最適化ポリシー

シナリオ

制約

高同時実行ポイントクエリ

高同時実行ポイントクエリを最適化したい場合。

説明

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

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

  • PreparedStatement は、主キーに基づくポイントクエリのみをサポートします。

同期マテリアライズドビュー

繰り返し実行され、時間がかかる複雑なクエリを最適化したい場合。

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

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

詳細については、「同期マテリアライズドビュー」をご参照ください。

インデックスによる高速化

任意のシナリオでデータを迅速にクエリ・特定したい場合。

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

Bucket Shuffle Join

JOIN クエリを最適化したい場合。

JOIN 条件には左テーブルの分散列を含める必要があり、実行中に左テーブルは 1 つのパーティションのデータのみを使用します。

Colocation Join

JOIN クエリを最適化したい場合。

JOIN 条件には左テーブルの分散列を含める必要があり、かつ左テーブルと右テーブルは同じ Colocate Group に属している必要があります。

ランタイムフィルター

大規模テーブルと小規模テーブルを結合する処理の最適化が必要なシナリオ。

ランタイムフィルターを使用する場合、JOIN ステートメント は次の要件を満たす必要があります:

  • 左テーブルが大きく、右テーブルが小さいこと。ランタイムフィルターを構築する際は、メモリオーバーヘッドを含む計算コストを考慮する必要があります。

  • JOIN 結果セットのサイズが小さいこと。 JOIN 結果セットのサイズが小さい場合、JOIN ステートメント によって左テーブルのデータの大部分がフィルタリングされることを示します。

BITMAP による正確な重複排除

  • 重複排除の結果を正確にする必要があり、かつ数百万件のデータレコードが含まれるシナリオ。

  • ストレージリソースが十分なシナリオ。

  • データ型の制約:

    • TINYINT、SMALLINT、INT、BIGINT 型の整数は、そのまま使用できます。

    • 文字列などの非整数は、グローバルディクショナリを使用して整数にマッピングした後に使用できます。これにより、保守コストが増加します。

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

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

  • 数十億件のデータレコードなどの大量データを処理する必要があり、かつ結果に一定の誤差 (分析指標値の不正確さなど) を許容できるシナリオ。

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

  • 精度の低下:正確な結果を取得できず、結果には一定の誤差が生じます。

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