日時列でテーブルを効率的にパーティション分割する方法
日付列ごとにテーブルをパーティション分割することは、クエリのパフォーマンスを向上させるために使用される手法です。ただし、制限を理解し、適切なパーティション化方法を選択することが重要です。
例のように、ハッシュによってパーティション化する場合、日付列にパーティション プルーニングを使用することはできません。このような場合は、TO_DAYS(DATE()) の結果を格納する追加の INTEGER 列を作成し、その列でパーティション分割することができます。これにより、効率的なパーティショニングとデータ取得が可能になります。
もう 1 つのアプローチは、RANGE パーティショニングを使用することです。テーブルを定義された日付範囲に分割することで、特定の日付範囲が特定のパーティションに配置されるようにすることができます。このアプローチにより、日付ベースのクエリのプルーニングとパフォーマンスが向上します。
たとえば、次の RANGE パーティション テーブルを作成できます。
<code class="sql">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 future VALUES LESS THAN MAXVALUE );</code>
この RANGE パーティション テーブルを使用すると、次のクエリは次のようになります。指定された日付のデータを効率的に取得します:
<code class="sql">SELECT * FROM raw_log_2011_4 WHERE ftime = '2011-04-03';</code>
以上がMySQL で日時列によってテーブルを効率的に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。