2009-10-16 4 views
46

私は文書(http://dev.mysql.com/doc/refman/5.1/en/partitioning.html)を読んだことがありますが、私はあなた自身の言葉で、それが何で、なぜそれが使われているのかを考えています。MYSQLパーティショニングとは何ですか?

  1. 主に複数のサーバーで使用されているため、1つのサーバーをドラッグしませんか?
  2. したがって、データの一部はserver1にあり、データの一部はserver2にあります。そして、サーバー3はserver1またはserver2に「ポイント」します...それはどのように動作するのですか?
  3. MYSQLのドキュメントは、同じサーバー内のパーティション化に焦点を当てているのはなぜですか?サーバー間で分散させることが目的なら、なぜですか?

答えて

122

パーティション分割の考え方は、複数のサーバーを使用するのではなく、1つのテーブルではなく複数のテーブルを使用することです。あるテーブルを複数のテーブルに分割して、あるサブテーブルの古いデータと別のテーブルの新しいデータを持つことができます。次に、データベースは、2番目のテーブルにあることを知って新しいデータを要求するクエリを最適化できます。さらに、データの分割方法を定義します。 the MySQL Documentationから

簡単な例:

CREATE TABLE employees (
    id INT NOT NULL, 
    fname VARCHAR(30), 
    lname VARCHAR(30), 
    hired DATE NOT NULL DEFAULT '1970-01-01', 
    separated DATE NOT NULL DEFAULT '9999-12-31', 
    job_code INT, 
    store_id INT 
) 
PARTITION BY RANGE (YEAR(separated)) (
    PARTITION p0 VALUES LESS THAN (1991), 
    PARTITION p1 VALUES LESS THAN (1996), 
    PARTITION p2 VALUES LESS THAN (2001), 
    PARTITION p3 VALUES LESS THAN MAXVALUE 
); 

これは、例えばをスピードアップすることができます:

簡単なことで、古いデータを削除
  1. ALTER TABLE employees DROP PARTITION p0; 
    
  2. データベースクエリをスピードアップすることができますこのように:

    SELECT COUNT(*) 
    FROM employees 
    WHERE separated BETWEEN '2000-01-01' AND '2000-12-31' 
    GROUP BY store_id; 
    

すべてのデータがp2パーティションにのみ格納されていることがわかっています。

+2

#2は「プルーニング」と呼ばれています – longneck

+17

これはインターネット上でのパーティション分割に関する最良の説明です。 –