68

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

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

3 に答える 3

188

パーティショニングの背後にある考え方は、複数のサーバーを使用することではなく、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 パーティションにのみ格納されていることがわかっています。

于 2009-10-16T19:42:13.033 に答える
2

パーティション分割されたテーブルは、複数の物理サブテーブルで構成される単一の論理テーブルです。パーティショニング コードは実際には、基になるパーティションを表す一連の 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 );

詳しくはこちらをご覧ください

于 2018-10-16T12:40:06.587 に答える