日時列によるテーブルのパーティション化
MySQL では、日時列ごとにテーブルをパーティション化すると、テーブルを分割することで効率的なデータ管理とクエリの最適化が可能になります。より小さな論理単位に分割します。ただし、HASH パーティション化を使用して日時列によってテーブルをパーティション化しようとすると、特定の日のデータの選択で問題が発生する可能性があります。
HASH パーティション化の制限
HASH パーティション化の使用MySQL はパーティション プルーニングを利用できないため、datetime カラムには問題が発生する可能性があります。これは、日時値の範囲に基づいてフィルタリングするクエリでは、指定されたパーティションを利用できない可能性があることを意味します。
代替パーティション オプション
これらの制限を克服するには、代替パーティション戦略を使用できます。採用:
TO_DAYS(DATE()) の結果を追加の INTEGER 列に格納します。これにより、日時列ではなく整数列で効率的なプルーニングが可能になります。
TO_DAYS で RANGE パーティション化を使用してテーブルをパーティション化します。 (ftime) 列。これにより、日の範囲に基づいてパーティションが作成され、特定の日の正確なデータ取得が可能になります。
例
次の RANGE パーティション テーブルについて考えてみましょう:
CREATE TABLE raw_log_2011_4 ( id bigint(20) NOT NULL AUTO_INCREMENT, logid char(16) NOT NULL, tid char(16) NOT NULL, reporterip char(46) DEFAULT NULL, ftime datetime DEFAULT NULL, KEY id (id) ) ENGINE=InnoDB AUTO_INCREMENT=286802795 DEFAULT CHARSET=utf8 PARTITION BY RANGE( TO_DAYS(ftime) ) ( PARTITION p20110401 VALUES LESS THAN (TO_DAYS('2011-04-02')), PARTITION p20110402 VALUES LESS THAN (TO_DAYS('2011-04-03')), ... PARTITION p20110429 VALUES LESS THAN (TO_DAYS('2011-04-30')), PARTITION future VALUES LESS THAN MAXVALUE );
このテーブルには、2011 年 4 月の各日のパーティションが含まれます。現在、クエリ
SELECT * FROM raw_log_2011_4 WHERE ftime = '2011-04-03';
はパーティション p20110403 のみを使用するため、特定の日のデータが効率的に取得されます。
以上がMySQL で日時カラムによってテーブルをパーティション分割する場合、HASH パーティション化に問題があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。