68

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

  1. 它主要用于多台服务器,因此不会拖累一台服务器吗?
  2. 因此,部分数据将在 server1 上,部分数据将在 server2 上。服务器 3 将“指向”服务器 1 或服务器 2……它是这样工作的吗?
  3. 为什么 MYSQL 文档专注于在同一服务器内进行分区……如果目的是将其分布在服务器之间?
4

3 回答 3

188

分区背后的想法不是使用多台服务器,而是使用多张表而不是一张表。您可以将一个表拆分为多个表,这样您就可以在一个子表中保存旧数据,在另一个表中保存新数据。然后,数据库可以优化查询,因为您知道它们在第二个表中,因此您需要新数据。此外,您还可以定义数据的分区方式。

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 回答
0

这实际上并不是关于使用不同的服务器实例(尽管有时这是可能的),它更多的是关于将您的表划分为不同的物理分区。

它将您的表和索引划分为更小的部分,甚至将其细分为更小的部分。可以将其想象为在一个大仓库(一张大桌子)中拥有数百万本不同主题和不同年份(例如 2000-2019 年)的不同杂志。分区意味着您可以将它们组织在那个大仓库内的不同房间中。它们仍然一起属于一个仓库,但现在您根据您的数据库分区策略将它们按逻辑级别分组。

Indexing is actually like keeping a table of which magazine is where in your warehouse, or in your rooms inside your warehouse. As you can see, there is a big difference between database partitioning and indexing, and they can be very well used together.

You can read more about it on my website on this article about Database Partitioning

于 2019-10-10T09:09:41.613 回答