Spec-Zone .ru
спецификации, руководства, описания, API
|
Связанные с разделением пункты для ALTER
TABLE
может использоваться с разделенными таблицами для того, чтобы повторно разделить, для того,
чтобы добавить, отбросить, объединить, и разделить разделы, и для того, чтобы выполнить обслуживание разделения.
Просто использование a partition_options
пункт с ALTER TABLE
на разделенной таблице повторно делит таблицу согласно
схеме выделения разделов, определенной partition_options
. Этот
пункт всегда начинается PARTITION BY
, и следует за тем же самым синтаксисом
и другими правилами, как применяются к partition_options
пункт
для CREATE TABLE
(см. Раздел
13.1.17,"CREATE TABLE
Синтаксис", для более подробной
информации), и может также использоваться, чтобы разделить существующую таблицу, которая уже не делится.
Например, считайте (неразделенную) таблицу определенной как показано здесь:
CREATE TABLE t1 ( id INT, year_col INT);
Эта таблица может быть разделена HASH
, использование id
столбец как ключ разделения, в 8 разделов посредством этого оператора:
ALTER TABLE t1 PARTITION BY HASH(id) PARTITIONS 8;
MySQL 5.6.11 и позже поддерживает ALGORITHM
опция с [SUB]PARTITION BY [LINEAR] KEY
. ALGORITHM=1
заставляет сервер использовать те же самые ключевые хеш-функции в качестве MySQL 5.1, вычисляя
размещение строк в разделах; ALGORITHM=2
средства, что сервер
использует ключевые хеш-функции, реализованные и используемые по умолчанию для нового KEY
разделенные таблицы в MySQL 5.5 и позже. (Разделенные таблицы,
создаваемые с ключевыми хеш-функциями, используемыми в MySQL 5.5 и позже, не могут использоваться
сервером MySQL 5.1.) Не определение опции имеет тот же самый эффект как использование ALGORITHM=2
. Эта опция предназначается для использования в основном,
обновляя или понижая [LINEAR] KEY
разделенные таблицы между MySQL 5.1 и
более поздними версиями MySQL, или для того, чтобы составить таблицы, разделенные KEY
или LINEAR KEY
на MySQL 5.5 или
более позднем сервере, который может использоваться на сервере MySQL 5.1.
Обновить a KEY
разделенная таблица, которая создавалась в MySQL 5.1,
сначала выполняется SHOW CREATE
TABLE
и отметьте точные столбцы и число показанных разделов. Теперь выполнитесь ALTER TABLE
оператор, использующий точно тот же самый список столбцов
и число разделов как в CREATE TABLE
оператор, добавляя ALGORITHM=2
сразу после PARTITION BY
ключевые слова. (Следует также включать LINEAR
ключевое слово, если это
использовалось для исходного табличного определения.) Пример от сеанса в mysql клиенте показывают здесь:
mysql>SHOW CREATE TABLE p\G
*************************** 1. row *************************** Table: pCreate Table: CREATE TABLE `p` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cd` datetime NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1/*!50100 PARTITION BY LINEAR KEY (id)PARTITIONS 32 */1 row in set (0.00 sec)mysql>ALTER TABLE p
PARTITION BY LINEAR KEY ALGORITHM=2 (id) PARTITIONS 32;
Query OK, 0 rows affected (5.34 sec)Records: 0 Duplicates: 0 Warnings: 0mysql>SHOW CREATE TABLE p\G
*************************** 1. row *************************** Table: pCreate Table: CREATE TABLE `p` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cd` datetime NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1/*!50100 PARTITION BY LINEAR KEY (id)PARTITIONS 32 */1 row in set (0.00 sec)
Понижение таблицы создало использование хеширования ключа значения по умолчанию, используемого в
MySQL 5.5, и позже включать его использованию сервером MySQL 5.1 подобно, кроме в этом случае Вас
должен использовать ALGORITHM=1
вынудить разделы таблицы быть
восстановленными, используя ключевые хеш-функции MySQL 5.1. Рекомендуется, чтобы Вы не сделали это
кроме тех случаев, когда необходимый для совместимости с сервером MySQL 5.1 как улучшенный KEY
хеш-функции, используемые по умолчанию в MySQL 5.5 и позже,
обеспечивают исправления для многих проблем, найденных в более старой реализации.
Таблица, обновленная посредством ALTER TABLE ... PARTITION BY
ALGORITHM=2 [LINEAR] KEY ...
больше не может использоваться сервером MySQL 5.1. (Такая
таблица должна была бы быть понижена с ALTER TABLE ... PARTITION BY
ALGORITHM=1 [LINEAR] KEY ...
прежде, чем это могло использоваться снова сервером
MySQL 5.1.)
Таблица, которая следует из использования ALTER TABLE ... PARTITION BY
оператор должен следовать за теми же самыми правилами как одно создаваемое использование CREATE TABLE ... PARTITION BY
. Это включает правила, управляющие
отношением между любыми уникальными ключами (включая любой первичный ключ), который таблица могла бы
иметь, и столбец или столбцы, используемые в выражении разделения, как обсуждено в Разделе
18.6.1, "Деля Ключи, Первичные ключи, и Уникальные ключи". CREATE
TABLE ... PARTITION BY
правила для того, чтобы определить число разделов также
применяются к ALTER TABLE ... PARTITION BY
.
partition_definition
пункт для ALTER
TABLE ADD PARTITION
поддерживает те же самые опции как пункт того же самого имени для CREATE TABLE
оператор. (См. Раздел
13.1.17,"CREATE TABLE
Синтаксис", для синтаксиса и
описания.) Предполагают, что Вам создали разделенную таблицу как показано здесь:
CREATE TABLE t1 ( id INT, year_col INT)PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999));
Можно добавить новый раздел p3
к этой таблице для того, чтобы сохранить
значения меньше чем 2002
следующим образом:
ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2002));
DROP PARTITION
может использоваться, чтобы отбросить один или больше
RANGE
или LIST
разделы. Этот оператор не
может использоваться с HASH
или KEY
разделы; вместо этого, используйте COALESCE PARTITION
(см. ниже). Любые
данные, которые хранились в отброшенных разделах, названных в partition_names
список отбрасывается. Например, учитывая таблицу t1
определенный ранее,
можно отбросить названные разделы p0
и p1
как показано здесь:
ALTER TABLE t1 DROP PARTITION p0, p1;
DROP PARTITION
не работает с таблицами, которые используют
NDB
механизм хранения. См. Раздел
18.3.1, "Управление RANGE
и LIST
Разделы", и Раздел
17.1.6, "Известные Ограничения MySQL Cluster".
ADD PARTITION
и DROP PARTITION
в настоящий
момент не поддерживать IF [NOT] EXISTS
.
Переименовывает разделенной таблицы, поддерживаются. Можно переименовать отдельные разделы, косвенно
используя ALTER TABLE ... REORGANIZE PARTITION
; однако, эта работа
делает копию данных раздела..
В MySQL 5.6 возможно удалить строки из выбранных разделов, используя TRUNCATE
PARTITION
опция. Эта опция берет список разделенных запятой значений одного или более имен
раздела. Например, рассмотрите таблицу t1
как определено здесь:
CREATE TABLE t1 ( id INT, year_col INT)PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999), PARTITION p3 VALUES LESS THAN (2003), PARTITION p4 VALUES LESS THAN (2007));
Удалить все строки из раздела p0
, можно использовать следующий
оператор:
ALTER TABLE t1 TRUNCATE PARTITION p0;
Оператор, только показанный, имеет тот же самый эффект как следующий DELETE
оператор:
DELETE FROM t1 WHERE year_col < 1991;
Усекая многократные разделы, разделы не должны быть непрерывными: Это может значительно упростить,
удаляют операции на разделенных таблицах, которые иначе потребовали бы очень сложный WHERE
условия если покончено DELETE
операторы. Например, этот оператор удаляет все строки из
разделов p1
и p3
:
ALTER TABLE t1 TRUNCATE PARTITION p1, p3;
Эквивалент DELETE
оператор показывают здесь:
DELETE FROM t1 WHERE (year_col >= 1991 AND year_col < 1995) OR (year_col >= 2003 AND year_col < 2007);
Можно также использовать ALL
ключевое слово вместо списка имен раздела;
в этом случае оператор действует на все разделы в таблице.
TRUNCATE PARTITION
просто удаляет строки; это не изменяет определение
таблицы непосредственно, или любого из ее разделов.
TRUNCATE PARTITION
не работает с подразделами.
Можно проверить, что строки были отброшены, проверяя INFORMATION_SCHEMA.PARTITIONS
таблица, используя запрос, такой как этот:
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1';
TRUNCATE PARTITION
поддерживается только для разделенных таблиц, которые
используют MyISAM
, InnoDB
, или MEMORY
механизм
хранения. Это также продолжает работать BLACKHOLE
таблицы (но не имеет никакого эффекта). Это не
поддерживается для ARCHIVE
таблицы.
COALESCE PARTITION
может использоваться с таблицей, которая делится
HASH
или KEY
сокращать количество разделов
number
. Предположите, что Вы составили таблицу t2
использование следующего определения:
CREATE TABLE t2 ( name VARCHAR (30), started DATE)PARTITION BY HASH( YEAR(started) )PARTITIONS 6;
Можно сократить количество разделов, используемых t2
от 6 до 4
использований следующего оператора:
ALTER TABLE t2 COALESCE PARTITION 2;
Данные содержатся в последнем number
разделы будут
объединены в остающиеся разделы. В этом случае разделы 4 и 5 будут объединены в первые 4 раздела
(разделы, пронумерованные 0, 1, 2, и 3).
Чтобы изменить некоторых, но не все разделы, используемые разделенной таблицей, можно использовать
REORGANIZE PARTITION
. Этот оператор может использоваться несколькими
способами:
Объединить ряд разделов в единственный раздел. Это может быть сделано,
называя несколько разделов в partition_names
список и предоставление единственного определения для partition_definition
.
Разделять существующий раздел на несколько разделов. Можно выполнить
это, называя единственный раздел для partition_names
и многократное обеспечение partition_definitions
.
Изменить диапазоны для подмножества разделов, определенных, используя
VALUES LESS THAN
или значение перечисляет для подмножества
разделов, определенных, используя VALUES IN
.
Этот оператор может также использоваться без
опция на таблицах,
которые автоматически делятся, используя partition_names
INTO (partition_definitions
)HASH
разделение, чтобы
вызвать перераспределение данных. (В настоящий момент, только NDB
таблицы автоматически делятся таким образом.) Это
полезно в MySQL Cluster, где, после того, как Вы добавили новые узлы данных MySQL Cluster
онлайн к существующему MySQL Cluster, Вы хотите перераспределить существующие табличные
данные MySQL Cluster к новым узлам данных. В таких случаях следует вызвать оператор с ONLINE
опция; другими словами, как показано здесь:
ALTER ONLINE TABLE table
REORGANIZE PARTITION;
Невозможно выполнить другой DDL одновременно с онлайновой табличной перестройкой — то
есть, никакие другие заявления DDL не могут быть сделаны в то время как ALTER ONLINE TABLE ... REORGANIZE PARTITION
оператор
выполняется. Для получения дополнительной информации о добавляющих узлах данных MySQL
Cluster онлайн, см. Раздел
17.5.13, "Узлы данных Кластера MySQL Adding Онлайн".
ALTER ONLINE TABLE ... REORGANIZE PARTITION
не работает с
таблицами, которые были составлены, используя MAX_ROWS
опция, потому что это использует константу MAX_ROWS
значение определяется в оригинале CREATE TABLE
оператор, чтобы определить число
требуемых разделов, таким образом, никакие новые разделы не создаются. Можно
использовать ALTER ONLINE TABLE ... MAX_ROWS=
увеличивать maxmimum число
строк для таблицы; после этого rows
ALTER ONLINE TABLE ... REORGANIZE
PARTITION
может использовать это новое, большее значение, чтобы увеличить
число разделов. Значение rows
должно быть
больше чем значение, определенное для MAX_ROWS
в оригинале
CREATE TABLE
оператор для этого, чтобы работать.
Попытка использовать REORGANIZE PARTITION
без
опция на явно
результатах разделенных таблиц по ошибке РЕОРГАНИЗОВЫВАЕТ РАЗДЕЛ без параметров, может только использоваться на авторазделенных таблицах, используя разделение ХЕША.
partition_names
INTO (partition_definitions
)
Для разделов, которые явно не назвали, MySQL автоматически обеспечивает имена по
умолчанию p0
, p1
, p2
, и так далее. То же самое является истиной относительно
подразделов.
Для более подробной информации об и примеров ALTER TABLE ... REORGANIZE
PARTITION
операторы, см. Раздел
18.3.1, "Управление RANGE
и LIST
Разделы".
Также возможно в MySQL 5.6 обмениваться табличным разделом или подразделом с
табличным использованием ALTER TABLE
, где pt
EXCHANGE PARTITION p
WITH TABLE nt
pt
разделенная таблица и p
раздел или подраздел pt
быть обмененным с неразделенной таблицей nt
, при условии, что следующие операторы являются истиной:
Таблица nt
самостоятельно не
делится.
Таблица nt
не временная
таблица.
Структуры таблиц pt
и nt
иначе идентичны.
Нет никаких строк в nt
та
ложь вне границ определения раздела для p
.
Таблица nt
не содержит ссылок внешнего
ключа, и ни у какой другой таблицы нет внешних ключей, которые обращаются к nt
.
Выполнение ALTER TABLE ... EXCHANGE
PARTITION
не вызывает любой включает или разделенную таблицу или таблицу, которой
обменяются.
Любой AUTO_INCREMENT
столбцы в таблице, которой обменяются с разделом,
сбрасываются.
IGNORE
ключевое слово не имеет никакого эффекта когда использующийся с
ALTER TABLE ... EXCHANGE PARTITION
.
Для получения дополнительной информации об и примеры ALTER TABLE ... EXCHANGE
PARTITION
, см. Раздел
18.3.3, "Обмениваясь Разделами и Подразделами с Таблицами".
Несколько дополнительных опций обеспечивают обслуживание раздела и восстанавливают
функциональность, аналогичную реализованному для неразделенных таблиц операторами такой как CHECK TABLE
и REPAIR TABLE
(которые также поддерживаются для разделенных таблиц;
см. Раздел 13.7.2, "Табличные Операторы
Обслуживания" для получения дополнительной информации). Они включают ANALYZE
PARTITION
, CHECK PARTITION
, OPTIMIZE
PARTITION
, REBUILD PARTITION
, и REPAIR
PARTITION
. Каждая из этих опций берет a partition_names
пункт, состоящий из одного или более имен разделов, разделенных запятыми. Разделы должны уже
существовать в таблице, которая будет изменена. Можно также использовать ALL
ключевое слово вместо partition_names
, когда оператор действует на все разделы в
таблице. Для получения дополнительной информации и примеры, см. Раздел
18.3.4, "Обслуживание Разделов".
Некоторые механизмы хранения MySQL, такой как InnoDB
, не поддерживайте оптимизацию на раздел. Для разделенной
таблицы, используя такой механизм хранения, ALTER TABLE ... OPTIMIZE
PARTITION
восстанавливает всю таблицу. Это - известная проблема. Начинание с MySQL 5.6.9,
выполнение этого оператора на такой таблице заставляют всю таблицу к восстановленному и
проанализированному, и соответствующему предупреждению быть выпущенной. (Ошибка #11751825, Ошибка
#42822)
Чтобы работать вокруг этой проблемы, используйте операторы ALTER TABLE ...
REBUILD PARTITION
и ALTER TABLE ... ANALYZE PARTITION
вместо
этого.
ANALYZE PARTITION
, CHECK PARTITION
, OPTIMIZE PARTITION
, и REPAIR PARTITION
опции
не разрешаются для таблиц, которые не делятся.
REMOVE PARTITIONING
позволяет Вам удалить разделение
таблицы, иначе не влияя на таблицу или ее данные. Эта опция может быть объединена с другим ALTER TABLE
опции, такие как используемые, чтобы добавить, отбросьте,
или переименуйте столбцы отбрасывания, или индексирует.
Используя ENGINE
опция с ALTER TABLE
изменяет механизм хранения, используемый таблицей, не влияя
на разделение.
До MySQL 5.6.6, когда ALTER TABLE ... EXCHANGE PARTITION
или ALTER
TABLE ... TRUNCATE PARTITION
был выполнен против разделенной таблицы, которая использовала MyISAM
(или другой механизм хранения, который использует блокировку на уровне
таблицы), вся разделенная таблица была заблокирована; в MySQL 5.6.6 и позже, в таких случаях, только блокируются
те разделы, которые фактически читаются из. Это не сделало (и не делает), влияют на разделенные таблицы,
используя механизм хранения — такой как InnoDB
— это использует блокировку на уровне строки. См. Раздел
18.6.4, "Деля и Блокируя".
Это возможно для ALTER TABLE
оператор, чтобы содержать a PARTITION BY
или REMOVE PARTITIONING
пункт в дополнении к другому изменять спецификации, но
PARTITION BY
или REMOVE PARTITIONING
пункт должен быть
определен последний после любых других спецификаций.
ADD PARTITION
, DROP PARTITION
, COALESCE
PARTITION
, REORGANIZE PARTITION
, ANALYZE
PARTITION
, CHECK PARTITION
, и REPAIR PARTITION
опции не могут быть объединены с другим изменять спецификации в сингле ALTER TABLE
,
начиная с опций только перечисленное действие на отдельных разделах. Для получения дополнительной информации см.
Раздел 13.1.7.1,"ALTER
TABLE
Операции раздела".
Только единственный экземпляр любой из следующих опций может использоваться в данном ALTER TABLE
оператор: PARTITION BY
, ADD PARTITION
, DROP PARTITION
, TRUNCATE
PARTITION
, EXCHANGE PARTITION
, REORGANIZE
PARTITION
, или COALESCE PARTITION
, ANALYZE
PARTITION
, CHECK PARTITION
, OPTIMIZE PARTITION
,
REBUILD PARTITION
, REMOVE PARTITIONING
.
Например, следующие два оператора недопустимы:
ALTER TABLE t1 ANALYZE PARTITION p1, ANALYZE PARTITION p2;ALTER TABLE t1 ANALYZE PARTITION p1, CHECK PARTITION p2;
В первом случае можно проанализировать разделы p1
и p2
из таблицы t1
одновременно используя единственный оператор с синглом ANALYZE PARTITION
опция, которая перечисляет оба из разделов, которые будут
проанализированы, как это:
ALTER TABLE t1 ANALYZE PARTITION p1, p2;
Во втором случае не возможно выполнить ANALYZE
и CHECK
операции на различных разделах той же самой таблицы одновременно. Вместо этого следует сделать два отдельных
заявления, как это:
ALTER TABLE t1 ANALYZE PARTITION p1;ALTER TABLE t1 CHECK PARTITION p2;