MySQL で日時列によってテーブルを効率的に分割するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-24 17:36:02
オリジナル
900 人が閲覧しました

How Can I Efficiently Partition a Table by a Datetime Column in MySQL?

日時列でテーブルを効率的にパーティション分割する方法

日付列ごとにテーブルをパーティション分割することは、クエリのパフォーマンスを向上させるために使用される手法です。ただし、制限を理解し、適切なパーティション化方法を選択することが重要です。

例のように、ハッシュによってパーティション化する場合、日付列にパーティション プルーニングを使用することはできません。このような場合は、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!