Секционирование в MySQL для больших наборов данных

MySQLMySQLBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь реализовывать секционирование (partitioning) базы данных MySQL для больших наборов данных, чтобы повысить производительность запросов и упростить управление данными. Лабораторная работа сосредоточена на секционировании таблицы по диапазону, в частности, с использованием столбца sale_date таблицы sales.

Вы начнете с подключения к серверу MySQL и создания базы данных sales_data. Затем вы создадите таблицу sales, секционировав ее по году из столбца sale_date на секции (partitions) для 2020, 2021, 2022, 2023 годов и будущую секцию. В последующих шагах будут рассмотрены запросы данных из конкретных секций, переорганизация секций с использованием команды ALTER TABLE и проверка влияния секционирования на скорость выполнения запросов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/DatabaseFunctionsandDataTypesGroup(["Database Functions and Data Types"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/alter_table("Table Modification") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/date("Date Type") subgraph Lab Skills mysql/use_database -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} mysql/create_database -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} mysql/create_table -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} mysql/alter_table -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} mysql/select -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} mysql/date -.-> lab-550912{{"Секционирование в MySQL для больших наборов данных"}} end

Секционирование таблицы по диапазону

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

Сначала подключимся к серверу MySQL. Откройте терминал в виртуальной машине LabEx. Вы должны уже находиться в директории ~/project.

mysql -u root -p

При запросе пароля введите пароль для пользователя root. Если вы не устанавливали пароль для root, просто нажмите Enter.

Теперь создадим базу данных с именем sales_data:

CREATE DATABASE sales_data;
USE sales_data;

Далее создадим таблицу с именем sales со столбцами sale_id, sale_date и amount. Мы будем секционировать эту таблицу по столбцу sale_date.

CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
)
PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION pFuture VALUES LESS THAN MAXVALUE
);

Разберем это выражение CREATE TABLE:

  • PARTITION BY RANGE (YEAR(sale_date)): Это указывает, что мы секционируем таблицу по диапазону, используя год из столбца sale_date.
  • PARTITION p2020 VALUES LESS THAN (2021): Это создает секцию (partition) с именем p2020, которая будет содержать все строки, где год в столбце sale_date меньше 2021 (то есть 2020 год).
  • PARTITION p2021 VALUES LESS THAN (2022): Это создает секцию с именем p2021, которая будет содержать все строки, где год в столбце sale_date меньше 2022 (то есть 2021 год).
  • PARTITION p2022 VALUES LESS THAN (2023): Это создает секцию с именем p2022, которая будет содержать все строки, где год в столбце sale_date меньше 2023 (то есть 2022 год).
  • PARTITION p2023 VALUES LESS THAN (2024): Это создает секцию с именем p2023, которая будет содержать все строки, где год в столбце sale_date меньше 2024 (то есть 2023 год).
  • PARTITION pFuture VALUES LESS THAN MAXVALUE: Это создает секцию с именем pFuture, которая будет содержать все строки, где год в столбце sale_date больше или равен 2024. MAXVALUE гарантирует, что любые будущие годы будут включены в эту секцию.

Теперь вставим некоторые примеры данных в таблицу sales:

INSERT INTO sales (sale_id, sale_date, amount) VALUES
(1, '2020-12-31', 100.00),
(2, '2021-01-15', 150.00),
(3, '2021-12-25', 200.00),
(4, '2022-06-01', 120.00),
(5, '2022-12-31', 180.00),
(6, '2023-03-10', 250.00),
(7, '2023-09-20', 300.00),
(8, '2024-01-01', 350.00);

Для проверки того, что данные были вставлены в правильные секции, вы можете использовать оператор EXPLAIN PARTITIONS. Например:

EXPLAIN PARTITIONS SELECT * FROM sales WHERE sale_date BETWEEN '2021-01-01' AND '2021-12-31';

Это покажет, какие секции (partition) MySQL будет использовать для выполнения запроса. Вы должны увидеть, что он использует только секцию p2021.

Вы также можете проверить количество строк в каждой секции с помощью следующего запроса:

SELECT
    PARTITION_NAME,
    TABLE_ROWS
FROM
    INFORMATION_SCHEMA.PARTITIONS
WHERE
    TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';

Этот запрос извлекает имя секции и количество строк в каждой секции для таблицы sales в базе данных sales_data.

+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020          |          1 |
| p2021          |          2 |
| p2022          |          2 |
| p2023          |          2 |
| pFuture        |          1 |
+----------------+------------+

Это подтверждает, что данные были правильно секционированы на основе столбца sale_date.

Запрос данных из определенной секции

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

Сначала убедитесь, что вы подключены к серверу MySQL и используете базу данных sales_data. Если вы закрыли соединение на предыдущем этапе, подключитесь снова, используя следующую команду:

mysql -u root -p

Введите пароль для пользователя root, если вас об этом попросят. Затем выберите базу данных sales_data:

USE sales_data;

Теперь запросим данные из секции p2021. Мы можем сделать это, добавив условие WHERE, которое фильтрует данные на основе ключа секционирования. В нашем случае ключом секционирования является год из столбца sale_date.

SELECT * FROM sales WHERE YEAR(sale_date) = 2021;

Этот запрос извлечет все строки из таблицы sales, где год в столбце sale_date равен 2021. Поскольку таблица секционирована по году, MySQL будет просматривать только секцию p2021 для выполнения этого запроса.

Вы можете проверить это, используя оператор EXPLAIN PARTITIONS:

EXPLAIN PARTITIONS SELECT * FROM sales WHERE YEAR(sale_date) = 2021;

Результат выполнения этого оператора покажет, какие секции MySQL будет использовать для выполнения запроса. Вы должны увидеть, что он использует только секцию p2021.

+----+-------------+-------+------------+------+---------------+------+---------+------+------+-----------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | Extra                             |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+-----------------------------------+
|  1 | SIMPLE      | sales | p2021      | ALL  | NULL          | NULL | NULL    | NULL |    2 | Using where                       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+-----------------------------------+

Как вы можете видеть, в столбце partitions указано p2021, что означает, что была доступна только секция p2021.

Вы также можете запросить данные из нескольких секций, используя оператор IN в условии WHERE:

SELECT * FROM sales WHERE YEAR(sale_date) IN (2021, 2022);

Этот запрос извлечет все строки из таблицы sales, где год в столбце sale_date равен либо 2021, либо 2022. MySQL будет просматривать как секцию p2021, так и секцию p2022 для выполнения этого запроса.

Снова вы можете проверить это, используя EXPLAIN PARTITIONS:

EXPLAIN PARTITIONS SELECT * FROM sales WHERE YEAR(sale_date) IN (2021, 2022);

Результат выполнения запроса покажет, что были доступны обе секции p2021 и p2022.

+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-----------------------------------+
| id | select_type | table | partitions    | type | possible_keys | key  | key_len | ref  | rows | Extra                             |
+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-----------------------------------+
|  1 | SIMPLE      | sales | p2021,p2022   | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where                       |
+----+-------------+-------+---------------+------+---------------+------+---------+------+------+-----------------------------------+

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

Переорганизация секций с использованием ALTER TABLE

На этом этапе мы научимся переорганизовывать секции (partitions) с помощью оператора ALTER TABLE в MySQL. Переорганизация секций может быть полезна по различным причинам, например, для объединения секций, разделения секций или добавления новых секций.

Сначала убедитесь, что вы подключены к серверу MySQL и используете базу данных sales_data. Если вы закрыли соединение на предыдущем этапе, подключитесь снова, используя следующую команду:

mysql -u root -p

Введите пароль для пользователя root, если вас об этом попросят. Затем выберите базу данных sales_data:

USE sales_data;

Начнем с добавления новой секции для года 2024. В настоящее время все данные о продажах с 2024 года и далее хранятся в секции pFuture. Мы можем создать отдельную секцию для 2024 года, используя оператор ALTER TABLE с предложением ADD PARTITION:

ALTER TABLE sales ADD PARTITION (PARTITION p2024 VALUES LESS THAN (2025));

Этот оператор добавляет новую секцию с именем p2024, которая будет содержать все строки, где год в столбце sale_date меньше 2025 (то есть 2024 год). После добавления секции нам нужно переорганизовать секцию pFuture, чтобы исключить из нее данные за 2024 год.

ALTER TABLE sales REORGANIZE PARTITION pFuture INTO (
    PARTITION p2025 VALUES LESS THAN (2026),
    PARTITION pFuture VALUES LESS THAN MAXVALUE
);

Эта команда разделяет секцию pFuture на секцию p2025 и новую секцию pFuture. Секция p2025 будет содержать данные за 2025 год, а новая секция pFuture - данные за 2026 год и последующие годы.

Теперь проверим структуру секций:

SELECT
    PARTITION_NAME,
    TABLE_ROWS
FROM
    INFORMATION_SCHEMA.PARTITIONS
WHERE
    TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';

В результате вы должны увидеть новую секцию p2024, секцию p2025 и обновленную секцию pFuture.

+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020          |          1 |
| p2021          |          2 |
| p2022          |          2 |
| p2023          |          2 |
| p2024          |          1 |
| p2025          |          0 |
| pFuture        |          0 |
+----------------+------------+

Далее посмотрим, как объединить секции. Предположим, что мы хотим объединить секции p2020 и p2021 в одну секцию с именем p2020_2021. Мы можем сделать это, используя оператор ALTER TABLE с предложением REORGANIZE PARTITION:

ALTER TABLE sales REORGANIZE PARTITION p2020, p2021 INTO (
    PARTITION p2020_2021 VALUES LESS THAN (2022)
);

Этот оператор объединяет секции p2020 и p2021 в новую секцию с именем p2020_2021. Предложение VALUES LESS THAN (2022) указывает, что эта секция будет содержать все строки, где год в столбце sale_date меньше 2022.

Теперь проверим структуру секций еще раз:

SELECT
    PARTITION_NAME,
    TABLE_ROWS
FROM
    INFORMATION_SCHEMA.PARTITIONS
WHERE
    TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';

Вы должны увидеть, что секции p2020 и p2021 были заменены на секцию p2020_2021.

+------------------+------------+
| PARTITION_NAME   | TABLE_ROWS |
+------------------+------------+
| p2020_2021       |          3 |
| p2022            |          2 |
| p2023            |          2 |
| p2024            |          1 |
| p2025            |          0 |
| pFuture          |          0 |
+------------------+------------+

Наконец, посмотрим, как удалить секцию. Предположим, что мы хотим удалить секцию p2025. Мы можем сделать это, используя оператор ALTER TABLE с предложением DROP PARTITION:

ALTER TABLE sales DROP PARTITION p2025;

Теперь проверим структуру секций в последний раз:

SELECT
    PARTITION_NAME,
    TABLE_ROWS
FROM
    INFORMATION_SCHEMA.PARTITIONS
WHERE
    TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';

Вы должны увидеть, что секция p2025 была удалена.

+------------------+------------+
| PARTITION_NAME   | TABLE_ROWS |
+------------------+------------+
| p2020_2021       |          3 |
| p2022            |          2 |
| p2023            |          2 |
| p2024            |          1 |
| pFuture          |          0 |
+------------------+------------+

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

Проверка влияния секционирования на скорость запросов

На этом этапе мы исследуем, как секционирование (partitioning) влияет на скорость выполнения запросов в MySQL. Хотя наш текущий набор данных небольшой, принципы, продемонстрированные здесь, важны для понимания преимуществ секционирования при работе с большими наборами данных.

Сначала убедитесь, что вы подключены к серверу MySQL и используете базу данных sales_data. Если вы закрыли соединение на предыдущем этапе, подключитесь снова, используя следующую команду:

mysql -u root -p

Введите пароль для пользователя root, если вас об этом попросят. Затем выберите базу данных sales_data:

USE sales_data;

Для измерения времени выполнения запросов мы будем использовать команду SET profiling = 1;. Эта команда включает профилирование (profiling), которое позволяет нам видеть ресурсы, использованные каждым запросом.

SET profiling = 1;

Теперь выполним запрос, который обращается к определенной секции. Выберем все продажи за 2023 год:

SELECT * FROM sales WHERE YEAR(sale_date) = 2023;

Далее выполним запрос, который потенциально может просмотреть все секции (хотя, с нашим ограниченным набором данных, он может быть оптимизирован). Выберем все продажи с суммой больше 200:

SELECT * FROM sales WHERE amount > 200;

Теперь изучим информацию о профилировании, чтобы увидеть время выполнения каждого запроса. Мы можем сделать это, используя команду SHOW PROFILES;:

SHOW PROFILES;

В выводе будет список запросов, выполненных с включенным профилированием, а также их продолжительность.

+----------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Для получения более подробной информации о конкретном запросе используйте команду SHOW PROFILE [query_id];, заменив [query_id] на идентификатор запроса, который вы хотите изучить. Идентификатор запроса можно найти в выводе команды SHOW PROFILES. Например, если идентификатор первого запроса был равен 1, вы должны выполнить следующую команду:

SHOW PROFILE 1;

В выводе будет разбиение выполнения запроса на этапы с указанием времени, затраченного на каждый этап (например, подготовка, отправка данных и т.д.).

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

В конце выключите профилирование:

SET profiling = 0;

На этом этапе мы показали, как использовать профилирование в MySQL для анализа времени выполнения запросов и понимания преимуществ секционирования для производительности. Помните, что эффективность секционирования зависит от размера ваших данных и типов выполняемых запросов.

Резюме

В этом практическом занятии (lab) мы научились секционировать таблицу по диапазону в MySQL, уделяя особое внимание улучшению производительности запросов и управления данными. Мы подключились к серверу MySQL, создали базу данных с именем sales_data, а затем создали таблицу с именем sales, секционированную по году в столбце sale_date. Это включало определение секций для конкретных диапазонов годов (2020, 2021, 2022, 2023) и секции для будущих значений, превышающих определенные диапазоны.

Оператор CREATE TABLE показал, как использовать PARTITION BY RANGE для разделения данных на основе года в столбце sale_date, распределяя строки по конкретным секциям в зависимости от их года. Эта стратегия секционирования позволяет более эффективно выполнять запросы и управлять большими наборами данных, логически группируя данные по диапазонам дат.