日時列のテーブル パーティション化の最適化
日時列によるテーブルのパーティション化は、クエリのパフォーマンスを向上させるための一般的な方法です。ただし、制限を理解し、適切なパーティショニング方法を選択することが重要です。
ハッシュ パーティショニングの落とし穴
年間通算日の値に基づくハッシュ パーティショニング (提供された例のように) パーティションのプルーニングができないため、datetime 列には最適ではない可能性があります。つまり、特定の日付のデータをクエリする場合でも、クエリ エンジンはすべてのパーティションをスキャンし、パフォーマンスの利点が減少します。
推奨アプローチ
INTEGER Column forパーティション プルーニング:
パーティション プルーニングを有効にするには、TO_DAYS(DATE()) の値を格納する追加の INTEGER 列を作成できます。これにより、日付範囲に基づいた効率的なクエリが可能になります。
RANGE パーティショニング:
または、RANGE パーティショニングを使用して、日付範囲に基づいてデータをさまざまなパーティションに割り当てることができます。この方法により、クエリ中に関連するパーティションのみがアクセスされるようになり、パフォーマンスが大幅に向上します。
RANGE パーティショニングの例:
次のクエリは、RANGE パーティショニングを示します:
CREATE TABLE raw_log_2011_4 (...) PARTITION BY RANGE( TO_DAYS(ftime) ) ( PARTITION p20110401 VALUES LESS THAN (TO_DAYS('2011-04-02')), ... PARTITION p20110430 VALUES LESS THAN (TO_DAYS('2011-04-31')), PARTITION future VALUES LESS THAN MAXVALUE );
現在、
SELECT * FROM raw_log_2011_4 WHERE ftime = '2011-04-03';
のようなクエリはパーティション p20110403 のみを利用するため、クエリの効率が向上します。
以上が質問形式の要件を念頭に置いて、記事に基づいたタイトルのオプションをいくつか示します。 **直接的かつ簡潔:** * **ハッシュ パーティショニングが日時列に対して非効率的であるのはなぜですか?**の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。