Что Делит MySQL?

Использование Ayende Rahien статический метод, который довольно прост...

public static class SystemTime
{
    public static Func Now = () => DateTime.Now;
}

60
задан Zed 16 October 2009 в 19:31
поделиться

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
);

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

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

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

     SELECT COUNT (*)
    ОТ сотрудников
    ГДЕ разделяются МЕЖДУ "2000-01-01" И "2000-12-31"
    ГРУППА ПО store_id;
    

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

165
ответ дан 24 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: