Паутов Алексей В.
Шрифт:
3.5. Ограничения выделения разделов
Этот раздел обсуждает текущие ограничения поддержки выделения разделов MySQL:
Начиная с MySQL 5.1.12, следующие конструкции не разрешаются в выражениях выделения разделов:
Вложенные обращения к функциям (то есть, конструкции типа func1(func2(col_name))).
Сохраненные процедуры, функции, UDF или plugins.
Объявленные переменные или переменные пользователя.
Начиная с MySQL 5.1.12, следующие функции MySQL специально не позволяются в выражениях выделения разделов:
GREATEST
ISNULL
LEAST
CASE
IFNULL
NULLIF
BIT_LENGTH
CHAR_LENGTH
CHARACTER_LENGTH
FIND_IN_SET
INSTR
LENGTH
LOCATE
OCTET_LENGTH
POSITION
STRCMP
CRC32
ROUND
SIGN
DATEDIFF
PERIOD_ADD
PERIOD_DIFF
TIMESTAMPDIFF
UNIX_TIMESTAMP
WEEK
CAST
CONVERT
BIT_COUNT
INET_ATON
Использование арифметических операторов +, -, * и / разрешается в выражениях выделения разделов. Однако, результат должен быть целочисленным значением или NULL (за исключением [LINEAR] KEY).
Начиная с MySQL 5.1.12, разрядные операторы |, , ^, <<, >> и ~ не разрешаются в выражениях выделения разделов.
Начиная с MySQL 5.1.12, только следующие функции MySQL поддерживаются в выражениях выделения разделов:
ABS
ASCII
CEILING
DAY
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FLOOR
HOUR
MICROSECOND
MINUTE
MOD
MONTH
ORD
QUARTER
SECOND
TIME_TO_SEC
TO_DAYS
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Важно: Вы должны иметь в виду, что результаты многих функций MySQL и операторов могут изменять SQL-режим сервера. По этой причине нежелательно изменять этот режим после создания разбитых на разделы таблиц.
Использование функций ASCII или ORD, чтобы преобразовать строковое значение (столбца типа CHAR или VARCHAR) к целому числу работает только, когда строка использует 8-разрядный набор символов. Объединение, используемое для строки, может быть любым объединением для связанного набора символов. Однако, объединения latin1_german2_ci, latin2_czech_cs и cp1250_czech_cs не могут использоваться, вследствие того, что эти объединения требуют символьных преобразований "один ко многим".
Если при создании таблиц с очень большим количеством разделов Вы сталкиваетесь с сообщением об ошибках типа Got error 24 from storage engine, Вы должны увеличить значение переменной системы open_files_limit.
Разбитые на разделы таблицы не поддерживают внешние ключи. Это включает разбитые на разделы таблицы, использующие тип памяти InnoDB.
Разбитые на разделы таблицы не поддерживают индексы FULLTEXT. Это включает разбитые на разделы таблицы, использующие тип памяти MyISAM.
Разбитые на разделы таблицы не поддерживают столбцы GEOMETRY.
Начиная с MySQL 5.1.8, временные таблицы не могут быть разбиты на разделы (Глюк #17497).
Таблицы, использующие тип памяти MERGE, не могут быть разбиты на разделы.
Разбитые на разделы таблицы, использующие тип памяти CSV, не обеспечиваются. Начиная с MySQL 5.1.12, невозможно создать разбитые на разделы таблицы CSV вообще.
До MySQL 5.1.6 таблицы, использующие тип памяти BLACKHOLE, также не могли быть разбиты на разделы.
Выделение разделов KEY (или LINEAR KEY) представляет собой единственный тип выделения разделов обеспечиваемого для типа памяти NDB. Начиная с MySQL 5.1.12, невозможно создать таблицу Cluster, использующую любое выделение разделов, кроме [LINEAR] KEY, а попытка это сделать вызывает ошибку.
При выполнении обновления, таблицы, использующие любой тип памяти (кроме NDBCLUSTER), которые разбиты на разделы KEY, должны разгрузиться и перезагрузиться.