Таблица разделов MySQL: подробное объяснение и практическое руководство на 10 000 слов
Таблица разделов MySQL: подробное объяснение и практическое руководство на 10 000 слов

1. Основные понятия разбиения

Разделение MySQL — это метод оптимизации базы данных, который позволяет разделить большую таблицу, индекс или их подмножество на несколько меньших, более управляемых фрагментов, которые называются «разделами». Каждый раздел можно хранить, создавать резервные копии, индексировать и выполнять другие операции независимо от других разделов. Эта технология в основном используется для повышения производительности запросов, удобства обслуживания и эффективности управления данными больших таблиц базы данных.

Физическое хранилище и логические разделы

  • физически,Каждый раздел может храниться в отдельном файле или каталоге.,Это зависит от конфигурации типа раздела.
  • логически,Данные таблицы разбиваются на разные разделы в зависимости от значения ключа «Раздел».

Улучшение производительности запросов

  • при выполнении запроса,MySQL может определить, какой раздел содержит связанные данные.,И ищите только по этим Разделам. Это уменьшает количество поисков, которые необходимо выполнить.,Тем самым улучшая производительность запросов。
  • для запроса диапазона или запроса конкретного значения,Раздел позволяет значительно сократить объем сканируемых данных.

Управление и обслуживание данных

  • Раздел может сделать управление данными более гибким. Например,Может самостоятельно создавать резервные копии и восстанавливать или оптимизировать определенный Раздел.,без необходимости работать со всей таблицей.
  • для своевременных данных,Вы можете быстро освободить место для хранения, удалив и заархивировав определенный файл.

Масштабируемость и параллельная обработка

  • Технология Раздела упрощает расширение таблиц базы данных данных до более крупных наборов данных. Когда размер стола превышает емкость одного накопителя, Можно использовать Раздел распределять данные по нескольким устройствам хранения данных。
  • Поскольку каждый Раздел может обрабатываться независимо,Таким образом, запросы и другие операции с библиотекой данных могут выполняться параллельно.,Тем самым еще больше повышая производительность.

2. Принципы и виды разбиения

Логическая структура хранения InnoDB

Логическая структура механизма хранения InnoDB представляет собой иерархическую систему, состоящую в основном из табличных пространств, сегментов, областей и страниц.

  1. табличное пространство:даInnoDBданныеконтейнер верхнего уровня,Все данные логически хранятся здесь.
  2. Сегмент:датабличное Важную часть пространства можно разделить на сегмент данных, сегмент индекса и сегмент отката в зависимости от цели. Механизм InnoDB отвечает за управление этими сегментами, обеспечивая их целостность и эффективный доступ.
  3. Степень:состоит из последовательных страниц,Размер каждой зоны по умолчанию составляет 1 МБ.,Независимо от того, как изменится размер страницы. Чтобы обеспечить непрерывность страницы,InnoDB выделит сразу несколько областей на диске. Каждый экстент содержит 64 последовательных страницы.,Когда размер страницы по умолчанию составляет 16 КБ. в начале сегмента,InnoDB сначала будет использовать 32 фрагментированные страницы для хранения данных,Оптимизировать использование пространства определенных сегментов небольших таблиц.
  4. Страница:даInnoDBСамый маленький блок управления дисками,Также известен как блоки. Его размер по умолчанию составляет 16 КБ.,Но это можно настроить через параметры конфигурации. Различные типы страниц,Включая страницу данных, страницу отмены, системную страницу и т. д.,Каждая страница имеет свой конкретный функционал и структуру.
Принцип разделения

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

  1. Тип раздела:MySQLуровень поддержки Раздел,То есть строки в таблице назначаются разным Разделам на основании определенных условий. Эти Разделы физически независимы.,Возможна обработка индивидуально,Его также можно обработать целиком.
  2. производительностьи Влияние:Хотя Разделможно улучшить Производительность эффективность управления запросами, но при неправильном использовании это также может оказать негативное влияние на производительность. Поэтому его эффекты следует тщательно оценивать при использовании Раздела.
  3. Индексы и разделы:существоватьMySQL,Раздел частичный,Это означает, что данныеииндекс хранятся в соответствующем Разделе. в настоящий момент,MySQL пока не поддерживает глобальный Разделиндекс.
  4. Ключ раздела и уникальный индекс:когдаповерхностьжитьсуществоватьхозяинключилитолькоиндексчас,Столбец Раздел должен быть частью этого индекса. Это сделано для обеспечения уникальности и эффективности запросов Раздела.

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

Тип раздела

MySQL поддерживает несколько различных типов методов секционирования, включая RANGE, LIST, HASH и KEY. Вот краткое введение в то, как работают эти методы секционирования:

  1. Раздел ДИАПАЗОНА:Диапазоны значений на основе столбцов будутданныеназначены разным Раздел。Например,данные могут быть назначены Разделу в разные месяцы и годы в зависимости от диапазона дат.
  2. СПИСОК раздела:Похоже на:Раздел ДИАПАЗОНА,но СПИСОК раздела назначает данные на основе набора дискретных значений для столбца. Можно указать список перечисления, чтобы определить значение каждого раздела.
  3. ХЭШ-раздел:Назначается на основе хеш-значения пользовательского выражения.данныек разным Раздел。Этот вид Разделподход подходит для обеспеченияданныесуществоватькаждыйиндивидуальный Разделравномерно распределены среди。
  4. КЛЮЧЕВОЙ раздел:Похоже на:ХЭШ-раздел,но КЛЮЧЕВОЙ Раздел поддерживает вычисление хеш-значений одного столбца и нескольких столбцов для назначения данных. Он поддерживает несколько столбцов в качестве ключей раздела и обеспечивает лучшее распределение данных и производительность. запросов。

3. Преимущества и сценарии использования разбиения

Разделение MySQL дает много преимуществ и подходит для различных сценариев использования:

  1. Улучшения производительности:добавивданныераспространяться на несколько Разделсередина,Запросы могут обрабатываться параллельно,Тем самым улучшая производительность запросов. в то же время,для включает в себя большое количество операций по обслуживанию данных (таких как резервное копирование и восстановление).,Возможна обработка индивидуальнокаждый Раздел,Снижает сложность и временные затраты операций.
  2. Управление упрощено:Раздел может сделать управление данными более гибким. Например,Может самостоятельно создавать резервные копии и восстанавливать или оптимизировать определенный Раздел.,без необходимости работать со всей таблицей. Это особенно важно для больших таблиц базы данных.,Потому что это может значительно сократить время обслуживания и потребление ресурсов.
  3. Архивирование и очистка данных:дляиметьчасатрибут времениизданные(Например, журнал、Записи о транзакциях и т. д.),Можно использовать Раздел, чтобы легко архивировать старые данные или удалять данные, которые больше не нужны. Архивируйте определенный Раздел, просто удалив или,Вы можете быстро освободить место для хранения и повысить производительность.
  4. Масштабируемость:Технология Раздела упрощает расширение таблиц базы данных данных до более крупных наборов данных. Когда размер стола превышает емкость одного накопителя, Можно Использование Раздел распределяет данные по нескольким устройствам хранения, обеспечивая горизонтальную масштабируемость.

4. Как реализовать разбиение

Реализация секционирования MySQL требует тщательного планирования и проектирования. Вот несколько рекомендуемых шагов:

  1. Определить ключ раздела:Выберите соответствующий столбец как Разделключ,Значение этого столбца будет использоваться для назначения данных различным Разделам. В качестве ключей Раздела обычно выбирают столбцы с непрерывными значениями и дискретными значениями.
  2. Выберите правильный тип раздела:в соответствии сданные Характеристикии Требования к запросу Выберите правильный тип раздела (ДИАПАЗОН, СПИСОК, HASHилиKEY). Убедитесь, что выбран тип. раздела способен равномерно распределять данные и повышать производительность запросов。
  3. Создать таблицу разделов:использоватьCREATE TABLEзаявление Создать таблицу разделов и укажите Разделить ключи Тип раздела и другие параметры. Например, используйте RANGEТип раздела создает таблицу данных продаж Раздела по месяцам:
Язык кода:javascript
копировать
CREATE TABLE sales (
    sale_id INT NOT NULL,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    ...
) PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p0 VALUES LESS THAN (2022),
    PARTITION p1 VALUES LESS THAN (2023),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);
  1. Запрос и обслуживание:После создания Разделповерхность,Вы можете выполнять операции запроса, как с обычной таблицей. MySQL автоматически найдет соответствующий Раздел для выполнения запроса. в то же время,Каждый файл можно создать резервную копию, восстановить и оптимизировать независимо.
  2. Контролируйте и корректируйте:Регулярный мониторинг Разделизпроизводительностьижить储использовать Состояние,и отрегулируйте по мере необходимости. Например,Новый раздел может быть добавлен для размещения новых данных.,или Удалите старый Раздел, чтобы освободить место для хранения.

5. Работа с таблицей разделов

В том числе создание таблиц разделов, изменение разделов, а также удаление, объединение, разделение и т. д.

5.1. Создайте таблицу с разделами.
Раздел ДИАПАЗОНА
Язык кода:javascript
копировать
CREATE TABLE sales_range (
    id INT NOT NULL,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
) PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p0 VALUES LESS THAN (2010),
    PARTITION p1 VALUES LESS THAN (2011),
    PARTITION p2 VALUES LESS THAN (2012),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);
СПИСОК раздела
Язык кода:javascript
копировать
CREATE TABLE sales_list (
    id INT NOT NULL,
    region ENUM('North', 'South', 'East', 'West') NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
) PARTITION BY LIST COLUMNS(region) (
    PARTITION pNorth VALUES IN('North'),
    PARTITION pSouth VALUES IN('South'),
    PARTITION pEast VALUES IN('East'),
    PARTITION pWest VALUES IN('West')
);
ХЭШ-раздел
Язык кода:javascript
копировать
CREATE TABLE sales_hash (
    id INT NOT NULL,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
) PARTITION BY HASH(YEAR(sale_date)) PARTITIONS 4;
КЛЮЧЕВОЙ раздел
Язык кода:javascript
копировать
CREATE TABLE sales_key (
    id INT NOT NULL,
    sale_date DATE NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY (id, sale_date)
) PARTITION BY KEY(id) PARTITIONS 4;
5.2. Изменить таблицу разделов.
Добавить раздел

для RANGE или СПИСОК раздела,Можно использовать ALTER TABLE заявление Добавить раздел:

Язык кода:javascript
копировать
ALTER TABLE sales_range ADD PARTITION (PARTITION p4 VALUES LESS THAN (2013));

для HASH или КЛЮЧЕВОЙ раздел, поскольку они являются Разделами на основе хеш-функций, их нельзя напрямую добавить. раздела, но этого можно добиться косвенно, воссоздав таблицу или отрегулировав количество разделов.

удалить раздел

Можно использовать ALTER TABLE заявлениеудалить раздел:

Язык кода:javascript
копировать
ALTER TABLE sales_range DROP PARTITION p0;

Это приведет к удалению имени p0 раздел и все данные, которые он содержит.

Объединить разделы

для соседнего RANGE или СПИСОК раздела,Можно использовать ALTER TABLE оператор для объединения их в один раздел:

Язык кода:javascript
копировать
ALTER TABLE sales_range REORGANIZE PARTITION p1, p2 INTO (
    PARTITION p1_2 VALUES LESS THAN (2012)
);

Пучок p1 и p2 Разделы объединяются в один с именем p1_2 новый раздел.

Ограничения на разделение разделов:

  1. Ограничение количества разделов:MySQLверноодининдивидуальныйповерхностьиз Раздел Количество ограничено,Обычно максимальное количество Разделов не может превышать 1024. Это означает, что при выполнении операции разделения,Необходимо обратить внимание на то, превысит ли количество вновь созданных Разделов этот лимит.
  2. Разделключи Тип Ограничения раздела:Операции разделения обычно подвергаются Разделключи Тип Ограничения раздела. Например, в Раздел В ДИАПАЗОНА точка разделения должна основываться на последовательных значениях клавиши Раздел. для СПИСОК раздела, разделение должно основываться на дискретных значениях перечисления. ХАШИКЛЮЧЕВОЙ Из-за своей природы, основанной на хэш-функции, раздел напрямую не поддерживает операции разделения.
  3. целостность данных:разделить разделчас,Необходимо обеспечить целостность данных. Если операция разделения приводит к потере или повреждению данных,Тогда это будет серьезной проблемой. поэтому,Перед выполнением операции разделения,Лучше сделать резервную копию данных.
  4. Вопросы производительности:Разделить большой Разделможет Влияниеданные Библиотекапроизводительность,Из-за необходимости перестроения индексов перемещается большое количество данных. Эту операцию лучше всего выполнять, когда нагрузка на библиотеку данных невелика.
разделить раздел

Используйте АЛЬТЕР TABLEзаявление Приходитьразделить раздел。грамматика,для Раздела ДИАПАЗОНА:

Язык кода:javascript
копировать
ALTER TABLE table_name REORGANIZE PARTITION partition_name INTO (  
    PARTITION new_partition1 VALUES LESS THAN (value1),  
    PARTITION new_partition2 VALUES LESS THAN (value2)  
);

table_name — имя таблицы, которую вы хотите изменить.,имя_раздела — имя раздела, который нужно разделить.,new_partition1 иnew_partition2 — имя нового Раздела.,А значение1изначение2 — это значение, определяющее новый диапазон значений ключа Раздела.

Язык кода:javascript
копировать
ALTER TABLE sales_range REORGANIZE PARTITION p1_2 INTO (  
    PARTITION p1 VALUES LESS THAN (value1),  
    PARTITION p2 VALUES LESS THAN (value2)  
);

Пучок человек по имени p1_2 разделы разделены на p1 и p2 Две перегородки.

Ограничения на слияние разделов:

  1. Объединить соседние разделы:существоватьMySQL,Обычно объединять можно только соседние разделы. Это означает, что вы не можете случайным образом выбрать два несмежных раздела для объединения.
  2. Тип разделения и ключевые ограничения:Аналогично операции разделения,Операции слияния также подлежат Тип разделаи Раздел ключевых ограничений. Не все типы Разделов можно легко объединить.
  3. данныемиграцияиреконструкция:Объединить разделычас,Может потребоваться перестройка индекса миграции данных.,Это может повлиять на производительность и доступность библиотеки данных.
Восстановить раздел

Восстановить раздел эквивалентно очистке всех данных в Разделе.,а затем снова вставьте,Это помогает организовать фрагменты внутри Раздела.

  • грамматика:
Язык кода:javascript
копировать
ALTER TABLE tbl_name REBUILD PARTITION partition_name_list;
  • Пример:
Язык кода:javascript
копировать
ALTER TABLE tbl_users REBUILD PARTITION p2, p3;

посредством этой операции,Можно эффективно организоватьp2иp3эти двое Разделсерединаизфрагменты。

Оптимизировать раздел

Когда удалил много данных из Раздела,или Автор внес множество изменений в Раздел, содержащий поля переменной длины (например, столбцы типа VARCHARилиTEXT).,Оптимизировать Раздел может освободить неиспользуемое пространство и дефрагментировать данные.

  • грамматика:
Язык кода:javascript
копировать
ALTER TABLE tbl_name OPTIMIZE PARTITION partition_name_list;
  • Пример:
Язык кода:javascript
копировать
ALTER TABLE tbl_users OPTIMIZE PARTITION p2, p3;

После этого,p2иp3Разделбудет более компактным,Неиспользованное пространство будет возвращено.

Раздел анализа

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

  • грамматика:
Язык кода:javascript
копировать
ALTER TABLE tbl_name ANALYZE PARTITION partition_name_list;
  • Пример:
Язык кода:javascript
копировать
ALTER TABLE tbl_users ANALYZE PARTITION p2, p3;

верноp2иp3Раздел После анализа,Библиотека данных позволяет более точно формулировать планы выполнения запросов по этим двум Разделам.

Проверить раздел

Эта операция используется для проверки целостности данныхилииндекса в Разделе.

  • грамматика :
Язык кода:javascript
копировать
ALTER TABLE tbl_name CHECK PARTITION partition_name_list;
  • Пример:
Язык кода:javascript
копировать
ALTER TABLE tbl_users CHECK PARTITION p2, p3;

Проведение проверок гарантируетp2иp3Разделизданныеииндексизчестность。

патч раздела

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

  • грамматика:
Язык кода:javascript
копировать
ALTER TABLE tbl_name REPAIR PARTITION partition_name_list;
  • Пример:
Язык кода:javascript
копировать
ALTER TABLE tbl_users REPAIR PARTITION p2, p3;

После исправления,p2иp3Разделсерединаиз Любое повреждение будет устранено。

5.3. Просмотр информации о разделе.

Можно использовать следующий запрос для просмотра информации о Разделе таблицы:

Язык кода:javascript
копировать
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'sales_range';

Используется или SHOW CREATE TABLE оператор для просмотра оператора создания таблицы, включая определения разделов:

Язык кода:javascript
копировать
SHOW CREATE TABLE sales_range;

6. Составная перегородка

Составной Раздел означает, что каждый Раздел в таблице Раздел разделен еще раз, а подразделенный под Раздел одновременно является Можно использовать ХЭШ-раздел,также Можно использовать КЛЮЧЕВОЙ раздел. Эту технику еще называют субраздел.

Сценарии использования

  • Огромное количество данных:когдаповерхностьсерединаизданные Количество очень большоечас,Одна секция может оказаться не в состоянии удовлетворить потребности в производительности. Составной Раздел позволяет более детально разделить данные.,Тем самым повышая эффективность запросов.
  • Многомерная оптимизация запросов:Если запрос часто включает в себя несколько измерений(нравитьсячасмеждуиобласть),Составной Раздел может быть Разделом для этих размеров.,тем самым оптимизируя Производительность запросов。

В составе Раздел распространенной комбинацией является сочетание RANGEилиLIST и HASHилиKEY.

Создайте таблицу, в которой будут записываться журналы поведения пользователей.,первыйв соответствии с Дата журналаруководитьRANGEРаздел,Затемсуществоватькаждыйв пределах диапазона датв соответствии спользовательIDруководитьHASHребенок Раздел。

Язык кода:javascript
копировать
CREATE TABLE user_activity_logs (
    log_id BIGINT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    activity_date DATE NOT NULL,
    activity_description VARCHAR(255) NOT NULL,
    PRIMARY KEY (log_id, user_id)
)
PARTITION BY RANGE COLUMNS(activity_date) (
    PARTITION p2022 VALUES LESS THAN ('2023-01-01') (
        SUBPARTITION sp2022a HASH(user_id) PARTITIONS 4
    ),
    PARTITION p2023 VALUES LESS THAN ('2024-01-01') (
        SUBPARTITION sp2023 HASH(user_id) PARTITIONS 4
    ),
    -- Вы можете продолжать добавлять годы по мере необходимости РазделиHASH sub Раздел
    PARTITION pfuture VALUES LESS THAN (MAXVALUE) (
        SUBPARTITION spfuture HASH(user_id) PARTITIONS 4
    )
);
  • Первыйв соответствии сactivity_dateруководитьобъем Раздел。каждыйобъем Разделвнутренний,сновав соответствии сuser_idруководить ПонятноHASHребенок Раздел。сделай этоизвыгодадаможно распределить более равномерноданные,улучшать Производительность запрос, особенно если условие запроса содержит и дату, и идентификатор пользователя.
  • Имя зарезервировано дляpfutureиз Раздел,этоизобъемдаменьше максимального(MAXVALUE),Это гарантирует, что будущие журналы также будут правильно вставлены в таблицу.
  • PARTITIONS 4поверхность Показыватьсуществоватькаждыйобъем Раздел Создано внутри4индивидуальный Хэшребенок Раздел。этотиндивидуальный Числа могутв соответствии сданныеколичествоизразмерирежим запросаруководить Корректирование。

7. Меры предосторожности и ограничения

При реализации Раздела MySQL необходимо обратить внимание на следующие соображения и ограничения:

  1. Выбор ключа раздела:Выберите подходящийиз Разделключключевой。убеждаться Разделключможно равномерно распределитьданные,И сопоставьте условия запроса,кулучшать Производительность запросов。
  2. Ограничение количества разделов:MySQLверноодининдивидуальныйповерхностьиз Раздел Количество ограничено(Обычно1024индивидуальный Раздел)。существоватьдизайн Стратегия Это ограничение следует учитывать при использовании раздела.
  3. Глобальные ограничения на уникальные индексы:существовать Разделповерхность Создайте глобальныйтолькоиндексчасжитьсуществоватьпредел。убеждаться Понятно解этот些предел,и отрегулируйте по мере необходимости.
  4. производительностьи Потребление ресурсов:Хотя Разделможно улучшитьпроизводительность,но в некоторых случаях,Слишком много Раздела может привести к увеличению производительности ресурсов. поэтому,Разумно спроектировать Стратегию раздела, чтобы сбалансировать производительность и потребление ресурсов.
  5. Совместимость и миграция:существовать Перенести существующийповерхностьприезжать Разделповерхность До,Обязательно сделайте резервную копию исходных данных и проверьте правильность процесса миграции. также,Чтобы понять различия в поддержке и совместимости функции Раздел между разными версиями MySQL.

8. Объясните несколько вопросов

8.1 Как раздел MySQL обрабатывает значения NULL

MySQL,Когда дело доходит до Раздела,Система специально не запрещает значения NULL. Является ли это фактическим значением столбца или результатом пользовательского выражения,MySQL обычно воспринимает значения NULL как 0. Однако,Этот вид Поведение не всегда может бытьдасоответствоватьцелостность Требования к точности данных. Чтобы избежать этого неявного преобразования NULL в 0, лучший вариант — явно объявить соответствующие столбцы как «НЕ» при разработке таблицы библиотеки данных. NULL”。сделай это可кубеждатьсяданныеизточностьипоследовательность,Также избегайте потенциальных проблем, вызванных неправильной интерпретацией значений NULL как 0. поэтому,При разработке часов «Раздел»,Следует внимательно отнестись к тому, как обрабатываются значения NULL.,и при необходимости принять соответствующие профилактические меры.

также,Если вам действительно нужно хранить значения NULL,и не хочу, чтобы MySQL рассматривал его как 0,Вы можете рассмотреть возможность использования других специальных значений (например, идентификационного значения, которое вряд ли появится в реальном бизнесе) вместо NULL.,или ВОЗсуществоватьдизайн Стратегия раздела явно учитывает логику обработки значений NULL. Таким образом вы сможете сохранить целостность данных и при этом лучше удовлетворять потребности бизнеса.

8.2 Столбец раздела должен быть частью первичного ключа или уникального ключа.

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

  1. целостность данных
    • Первичный ключ и уникальный ключ используются для обеспечения уникальности данных в таблице. Если столбец «Раздел» не является частью этих ключей, то в разных разделах могут существовать строки данных с тем же первичным ключом или значением уникального ключа, что нарушит ограничение уникальности данных.
  2. Производительность запросов
    • Основная цель Раздела — повысить Производительность. запрос, особенно для больших таблиц данных. Если столбец Раздел не является частью первичного ключа или уникального ключа, то при выполнении запроса на основе первичного ключа или уникального ключа MySQL может потребоваться поиск по всему Разделу, что снижает стоимость Производительности. запросов。
  3. согласованность данных
    • Когда таблицы представлены Разделом, каждый Раздел фактически можно рассматривать как независимую «подтаблицу». Если столбец «Раздел» не является частью первичного ключа или уникального ключа, то при выполнении операции обновления или удаления MySQL должен гарантировать согласованность всех разделов. данных, это увеличивает сложность и накладные расходы операции.
  4. Стратегия раздела
    • MySQLиз Стратегия Раздела распределяет данные по разным Разделам на основе значения столбца Раздел. Если столбец Раздел не является частью первичного ключа и уникального ключа, то Стратегия раздела может стать сложным и неэффективным, поскольку системе необходимо дополнительно обрабатывать ограничения первичных и уникальных ключей.
8.3 Вопросы разделения и производительности

Использование технологий должно быть правильным, чтобы реализовать их преимущества. Возьмем явную блокировку в качестве примера,Хотя мощный,Но неправильное использование может привести к снижению производительности или другим неблагоприятным последствиям. Так же,Технология «Раздел» не является универсальным инструментом повышения производительности.

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

Приложения библиотеки данных обычно можно разделить на две категории: OLTP (онлайн-обработка транзакций) и OLAP (онлайн-аналитическая обработка). Для приложений OLAP Раздел может значительно повысить производительность. запросов,Потому что аналитические запросы часто требуют обработки большого количества запросов. Разделить по времени,Например, поведение пользователей по данным за месяц.,Вы можете сделать запрос, достаточно лишь отсканировать соответствующий Раздел.,тем самым повышая эффективность.

Однако,В OLTP-приложениях,Вам нужно быть более осторожными при использовании Раздела. Такие приложения обычно не запрашивают более 10% данных в большой таблице.,Вместо этого быстро получите небольшое количество записей через индекс. Например,для таблицы, содержащей 10 миллионов записей,Если в запросе используется вспомогательный индекс, но без ключа Раздел,Может привести к падению производительности. Операция, которая изначально могла быть выполнена за 3 логических ввода-вывода в одном дереве B+.,В случае 10 Разделов может потребоваться (3+3)*10 логических операций ввода-вывода (соответственно доступ к совокупному индексу и вспомогательному индексу).

поэтому,В OLTP-приложенияхиспользовать Разделповерхностьчас,Обязательно выполните адекватное тестирование и оптимизацию производительности.

Чтобы облегчить разработчикам возможность наблюдать за использованием Раздела SQL-запросами, можно использоватьEXPLAIN PARTITIONSзаявлениеиSELECTКомбинация запросов,Таким образом, вы сможете четко увидеть, какой Раздел задействован в запросе.

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]