Что такое разделение MYSQL?

Я прочитал документацию (http://dev.mysql.com/doc/refman/5.1/en/partitioning.html), но я хотел бы, по вашим собственным словам, что это такое и почему это используемый.

  • Используется ли он в основном для нескольких серверов, поэтому он не перетаскивает один сервер?
  • Итак, часть данных будет на сервере1, а часть данных будет на сервере2. И сервер 3 будет "указывать" на server1 или server2... это то, как это работает?
  • Почему документация MYSQL сосредоточена на разделении внутри одного и того же сервера... если целью является распространение на серверах?

Ответ 1

Идея раздела состоит не в использовании нескольких серверов, а в использовании нескольких таблиц вместо одной таблицы. Вы можете разделить таблицу на множество таблиц, чтобы иметь старые данные в одной подкатегории и новые данные в другой таблице. Затем база данных может оптимизировать запросы, в которых вы запрашиваете новые данные, зная, что они находятся во второй таблице. Что еще, вы определяете, как данные разбиваются на разделы.

Простой пример из Документация 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
);

Это позволяет ускорить, например:

  • Удаление старых данных простым:

    ALTER TABLE employees DROP PARTITION p0;
    
  • База данных может ускорить запрос следующим образом:

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

Зная, что все данные хранятся только на p2-разделе.

Ответ 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 );

читайте больше здесь.

Ответ 3

На самом деле речь идет не об использовании разных экземпляров сервера (хотя это иногда возможно), а о разделении таблиц на разные физические разделы.

Он разделяет ваши таблицы и индексы на более мелкие части и даже подразделяет их на еще более мелкие части. Думайте об этом как о наличии нескольких миллионов разных журналов различной тематики и разных лет (скажем, 2000-2019) на одном большом складе (один большой стол). Разделение означало бы, что вы разместите их в разных комнатах внутри этого большого склада. Они по-прежнему принадлежат одному хранилищу, но теперь вы группируете их на логическом уровне, в зависимости от стратегии разделения базы данных.

Индексирование на самом деле похоже на ведение таблицы того, какой журнал находится на вашем складе или в ваших комнатах на вашем складе. Как видите, между разделением базы данных и индексацией существует большая разница, и их можно очень хорошо использовать вместе.

Вы можете прочитать больше об этом на моем сайте в этой статье о разделении базы данных