web-dev-qa-db-ja.com

MYSQLパーティショニングとは何ですか?

私はドキュメント( http://dev.mysql.com/doc/refman/5.1/en/partitioning.html )を読みましたが、あなた自身の言葉でそれが何であり、なぜそれが使われるのか。

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

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

MySQLドキュメンテーション の簡単な例

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パーティションにのみ保存されることを知っています。

162

パーティション化されたテーブルは、複数の物理サブテーブルで構成される単一の論理テーブルです。パーティショニングコードは、実際には、基になるパーティションを表す一連のHandlerオブジェクトのラッパーであり、Handlerオブジェクトを介して要求をストレージエンジンに転送します。パーティションは一種のブラックボックスであり、SQLレイヤーで基礎となるパーティションを非表示にしますが、ファイルシステムを見ると非常に簡単に確認できます。ファイルシステムを見ると、ハッシュ区切りの命名規則を持つコンポーネントテーブルが表示されます。

たとえば、次の例は、毎年の売上高を個別のパーティションに配置する簡単な方法です。

CREATE TABLE sales (
 order_date DATETIME NOT NULL,
 -- Other columns omitted
) ENGINE=InnoDB PARTITION BY RANGE(YEAR(order_date)) (
 PARTITION p_2010 VALUES LESS THAN (2010),
 PARTITION p_2011 VALUES LESS THAN (2011),
 PARTITION p_2012 VALUES LESS THAN (2012),
 PARTITION p_catchall VALUES LESS THAN MAXVALUE );

続きを読む ここ