什么是MYSQL分区?

TIM*_*MEX 60 mysql database partitioning

我已经阅读了文档(http://dev.mysql.com/doc/refman/5.1/en/partitioning.html),但我想用你自己的话说,它是什么以及为什么使用它.

  1. 它主要用于多个服务器,所以它不会拖动一个服务器?
  2. 因此,部分数据将在server1上,部分数据将在server2上.服务器3将"指向"server1或server2 ......它是如何工作的?
  3. 为什么MYSQL文档侧重于在同一服务器内进行分区...如果目的是将其分布在服务器上?

Szy*_*ski 165

分区背后的想法不是使用多个服务器,而是使用多个表而不是一个表.您可以将表分成多个表,以便可以在一个子表中包含旧数据,在另一个表中包含新数据.然后,数据库可以优化您要求新数据的查询,因为他们知道它们位于第二个表中.更重要的是,您可以定义数据的分区方式.

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
);
Run Code Online (Sandbox Code Playgroud)

这样可以加快速度,例如:

  1. 通过简单的方式删除旧数据:

    ALTER TABLE employees DROP PARTITION p0;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 数据库可以加速这样的查询:

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

知道所有数据仅存储在p2分区上.

  • 这是关于在互联网上进行分区的最佳解释. (30认同)