分区背后的想法不是使用多个服务器,而是使用多个表而不是一个表。 您可以将一个表分为多个表,以便一个子表中可以包含旧数据,而另一个表中可以包含新数据。 然后,数据库可以优化查询,在知道新数据位于第二张表中的情况下,您可以在其中查询新数据。 此外,您可以定义如何对数据进行分区。
来自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
);
这样可以加快速度,例如:
简单删除旧数据:
SELECT COUNT(*)
FROM employees
WHERE separated BETWEEN '2000-01-01' AND '2000-12-31'
GROUP BY store_id;
数据库可以加快这样的查询:
SELECT COUNT(*)
FROM employees
WHERE separated BETWEEN '2000-01-01' AND '2000-12-31'
GROUP BY store_id;
知道所有数据仅存储在p2分区上。