mysql - 什么是 MYSQL 分区?

标签 mysql database partitioning

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

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

最佳答案

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

来自the MySQL Documentation 的简单示例:

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 分区上。

关于mysql - 什么是 MYSQL 分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579930/

相关文章:

php - 来自 PHP 脚本的 PHP 和 MySQL 的确切版本是什么?

sql - 需要帮助编写递归查询

graph - 需要图形分区技术

algorithm - 尾递归快速排序的空间复杂度是多少?

python - 从数据库查看我的数据时出错

php - $wpdb - 它在失败时返回什么?

sql - 如何修改这个特定的查询?

database - SQLite 是否支持跨多个数据库的事务?

php - 数据库 : Save users and admins in the same table (pros/cons)?

mysql - 如何从已截断的 Mysql 5.6 分区中清除数据?