|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Не преобразовывайте системные таблицы MySQL в mysql база данных от MyISAM к InnoDB
таблицы! Это - недопустимая операция. Если Вы делаете это, MySQL не перезапускает, пока Вы не
восстанавливаете старые системные таблицы от резервного копирования или регенерируете их с mysql_install_db сценарием.
Это не
хорошая идея сконфигурировать InnoDB использовать файлы данных или файлы
журнала на объемах NFS. Иначе, файлы могли бы быть заблокированы другими процессами и становиться
недоступными использованию MySQL.
Таблица может содержать максимум 1020 столбцов. (Повышенный в MySQL 5.6.9 от более раннего предела 1000.
Таблица может содержать максимум 64 вторичных устройств, индексирует.
По умолчанию, индексировать ключ для единственного столбца индексируют, могут быть
до 767 байтов. Тот же самый предел длины применяется к, любой индексирует ключевой префикс. См. Раздел
13.1.13,"CREATE INDEX Синтаксис". Например, Вы могли бы
совершить нападки, этот предел с префиксом столбца индексируют больше чем
255 символов на a TEXT или VARCHAR столбец,
принимая набор символов UTF-8 и максимум 3 байтов для каждого символа. Когда innodb_large_prefix параметр конфигурации включается, этот предел
длины повышается до 3072 байтов, для InnoDB таблицы, которые используют
DYNAMIC и COMPRESSED
форматы строки.
Когда Вы пытаетесь определить индексировать длину префикса дольше чем позволенный, длина тихо
уменьшается до максимальной длины для группового, индексируют. Для уникального индекса, превышая
индексировать префиксный предел производит ошибку. Чтобы избежать таких ошибок для конфигураций
репликации, избегите устанавливать innodb_large_prefix у опции на ведущем устройстве, если это не
может также быть установлено на ведомых устройствах, и ведомых устройствах, есть уникальные индексы,
на которые мог влиять этот предел.
Этот параметр конфигурации изменяет обработку ошибок для некоторых комбинаций формата строки и длины
префикса дольше чем позволенный максимум. См. innodb_large_prefix для деталей.
InnoDB внутренняя максимальная длина ключа составляет
3500 байтов, но сам MySQL ограничивает это 3072 байтами. Этот предел применяется к длине объединенного,
индексируют ключ в многоколонном, индексируют.
Если Вы уменьшаете InnoDB размер
страницы к 8 Кбитам или 4 Кбитам, определяя innodb_page_size опция, создавая экземпляр MySQL, максимальная длина
индексировать ключа понижается пропорционально, основанная на пределе 3072 байтов для размера страницы
16 Кбит. Таким образом, максимум индексируют длину ключа, 1536 байтов, когда размер страницы составляет
8 Кбит, и 768 байтов, когда размер страницы составляет 4 Кбита.
Максимальная длина строки, за исключением столбцов переменной длины (VARBINARY, VARCHAR, BLOB и TEXT),
немного меньше чем половина страницы базы данных. Таким образом, максимальная длина строки составляет
приблизительно 8000 байтов для размера страницы значения по умолчанию 16 Кбит; если Вы уменьшаете размер
страницы, определяя innodb_page_size опция, создавая экземпляр MySQL, максимальная длина
строки составляет 4000 байтов для страниц 8 Кбит и 2000 байтов для страниц 4 Кбит. LONGBLOB и LONGTEXT столбцы должны составить меньше чем 4 Гбайт, и длина строки
итогов, включая BLOB и TEXT столбцы, должны быть меньше чем 4 Гбайт.
Если строка меньше чем половина страницы длиной, все это сохранено локально в пределах страницы. Если это превышает половину страницы, столбцы переменной длины выбираются для внешнего хранения вне страницы до судорог строки в пределах половины страницы, как описано в Разделе 5.3.2, "управление Файловым пространством".
Хотя InnoDB поддерживает размеры строки, больше чем 65
535 байтов внутренне, сам MySQL налагает предел размера строки 65 535 для объединенного размера всех
столбцов:
mysql>CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),->c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),->f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;ERROR 1118 (42000): Row size too large. The maximum row size for theused table type, not counting BLOBs, is 65535. You have to change somecolumns to TEXT or BLOBs
См. Раздел E.10.4, "Пределы на Столбце таблицы граф и Размер Строки".
На некоторых более старых операционных системах файлы должны составить меньше чем 2
Гбайт. Это не ограничение InnoDB непосредственно, но если Вы потребуете
большой табличной области, то Вы должны будете сконфигурировать ее использующий несколько меньших файлов
данных, а не один или файл большие файлы данных.
Объединенный размер InnoDB файлы журнала могут
составить до 512 Гбайт.
Минимальный размер табличной области немного больше чем 10 МБ. Максимальный размер табличной области является четырьмя миллиардами страниц базы данных (64TB). Это - также максимальный размер для таблицы.
Размер
страницы базы данных значения по умолчанию в InnoDB 16 Кбит, или можно
понизить размер страницы к 8 Кбитам или 4 Кбитам, определяя innodb_page_size опция, создавая экземпляр MySQL.
Увеличение размера страницы не является поддерживаемой работой: нет никакой гарантии
этого InnoDB будет обычно функционировать с размером страницы,
больше чем 16 Кбит. Проблемы компилирующий или рабочий InnoDB могут произойти. В частности ROW_FORMAT=COMPRESSED у Барракуды формат файла предполагает, что
размер страницы - самое большее 16 Кбит и использует 14-разрядные указатели.
Экземпляр MySQL, используя деталь InnoDB размер страницы
не может использовать файлы данных или файлы журнала от экземпляра, который использует различный
размер страницы. Это ограничение могло влиять на восстановление или понизить операции, используя
данные от MySQL 5.6, который делает размеры сайта поддержки кроме 16 Кбит.
InnoDB табличная поддержка FULLTEXT
индексирует, запускаясь в MySQL 5.6.4. См. Раздел 14.2.3.12.3,"FULLTEXT Индексирует" для деталей.
InnoDB таблицы поддерживают пространственные типы
данных, но не индексирует на них.
ANALYZE TABLE
определяет индексируют количество элементов (как выведено на экран в Cardinality столбец SHOW INDEX вывод), делая случайные
погружения к каждому из индексировать деревьев и обновления индексируют оценки количества
элементов соответственно. Поскольку они - только оценки, повторенные выполнения ANALYZE TABLE мог произвести различные числа. Это делает ANALYZE TABLE быстро на InnoDB таблицы,
но не 100 %, точных, потому что это не принимает все строки во внимание.
Можно сделать статистику
собранной ANALYZE TABLE
более точный и более устойчивый, включая innodb_stats_persistent параметр конфигурации, как объяснено в Разделе 14.2.4.2.10,
"Персистентная Статистика Оптимизатора для Таблиц InnoDB". Когда та установка
включается, важно работать ANALYZE
TABLE после того, как существенные изменения к индексированным данным столбца, потому
что статистические данные периодически не повторно вычисляются (такой как после перезапуска сервера)
как они традиционно, были.
Можно изменить число случайных погружений, изменяя innodb_stats_persistent_sample_pages системная переменная (если
персистентная установка статистики включается), или innodb_stats_transient_sample_pages системная переменная (если
персистентная установка статистики выключается). Для получения дополнительной информации см. Раздел 14.2.5,"InnoDB Функции Гибкости, Простоты использования и Надежности"
.
Использование MySQL индексирует оценки количества элементов только в оптимизации соединения. Если
некоторое соединение не оптимизируется правильным способом, можно попытаться использовать ANALYZE TABLE. В
немногих случаях это ANALYZE
TABLE не производит значения, достаточно хорошие для Ваших определенных таблиц, можно
использовать FORCE INDEX с Вашими запросами, чтобы вызвать
использование детали индексируют, или устанавливают max_seeks_for_key системная переменная, чтобы гарантировать, что
MySQL предпочитает, индексирует поиски по сканированиям таблицы. См. Раздел
5.1.4, "Системные Переменные Сервера", и Раздел
C.5.6, "Связанные с оптимизатором Проблемы".
SHOW TABLE
STATUS не дает точную статистику по InnoDB таблицы, за
исключением физического размера зарезервированы таблицей. Количество строки является только грубой
оценкой, используемой в оптимизации SQL.
InnoDB не проводит внутренний подсчет строк в таблице,
потому что параллельные транзакции могли бы "видеть" различные числа строк одновременно. Обработать a
SELECT COUNT(*) FROM t оператор, InnoDB
сканирует индексирование таблицы, которая занимает время, если индексирование не находится полностью в
пуле буферов. Если Ваша таблица часто не изменяется, используя кэш запроса MySQL хорошее решение. Чтобы
получить быстрое количество, необходимо использовать встречную таблицу, которую Вы составляете
самостоятельно и позволяете своему приложению обновлять его согласно вставкам, и удаляет это, делает.
Если приблизительное количество строки достаточно, SHOW TABLE STATUS может использоваться. См. Раздел
14.2.4.1,"InnoDB Настраивающие Подсказки по производительности"
.
На Windows, InnoDB всегда имена базы данных хранилищ и
имена таблиц внутренне в нижнем регистре. Чтобы переместить базы данных в двоичный формат от Unix до
Windows или от Windows до Unix, создайте все базы данных и таблицы, используя строчные имена.
AUTO_INCREMENT столбец ai_col
должен быть определен как часть индексирования так, что, возможно выполнить эквивалент индексированного
SELECT MAX( поиск на
таблице, чтобы получить максимальное значение столбца. Как правило, это достигается, делая столбец,
который индексирует первый столбец некоторой таблицы. ai_col)
Инициализируя ранее указанный AUTO_INCREMENT столбец
на таблице, InnoDB устанавливает монопольную блокировку на конце
индексирования связанного с AUTO_INCREMENT столбец. Получая доступ к
автоинкрементному счетчику, InnoDB использует определенное AUTO-INC режим блокировки таблицы, где блокировка длится только до конца
текущего SQL-оператора, не до конца всей транзакции. Другие клиенты не могут вставить в таблицу в то
время как AUTO-INC блокировка таблицы сохранена. См. Раздел
5.4.4,"AUTO_INCREMENT Обработка в InnoDB".
Когда Вы перезапускаете сервер MySQL, InnoDB май снова
использует старое значение, которое было сгенерировано для AUTO_INCREMENT
столбец, но никогда сохраненный (то есть, значение, которое было сгенерировано во время старой
транзакции, которая откатывалась).
Когда AUTO_INCREMENT целочисленный столбец исчерпывает
значения, последующее INSERT работа возвращает двойную ключевую ошибку. Это
- общее поведение MySQL, подобное как MyISAM работы.
DELETE FROM
не регенерирует таблицу, но вместо этого удаляет все строки, один за другим. tbl_name
В настоящий момент каскадные действия внешнего ключа не активируют триггеры.
Невозможно составить таблицу с именем столбца, которое соответствует имя
внутреннего столбца InnoDB (включая DB_ROW_ID, DB_TRX_ID,
DB_ROLL_PTR, и DB_MIX_ID). Сервер сообщает об
ошибке 1005 и обращается к ошибке–1 в сообщении об ошибке. Это ограничение применяется только к
использованию имен в верхнем регистре.
LOCK
TABLES получает два, соединяет каждую таблицу если innodb_table_locks=1 (значение по умолчанию). В дополнение к блокировке
таблицы на уровне MySQL это также получает InnoDB блокировка таблицы.
Версии MySQL прежде 4.1.2 не получали InnoDB блокировки таблицы; старое
поведение может быть выбрано, устанавливая innodb_table_locks=0. Если нет
InnoDB блокировка таблицы получается, LOCK TABLES завершается, даже если некоторые записи таблиц
блокируются другими транзакциями.
В MySQL 5.6, innodb_table_locks=0 не имеет никакого эффекта для таблиц,
заблокированных явно с LOCK TABLES ... WRITE. Это действительно имеет эффект для таблиц,
заблокированных для чтения, или пишет LOCK TABLES ... WRITE неявно (например, через триггеры) или LOCK TABLES ...
READ.
Все InnoDB блокировки, сохраненные транзакцией,
выпускаются, когда транзакция фиксируется или прерывается. Таким образом не имеет большого количества
смысла вызывать LOCK
TABLES на InnoDB таблицы в autocommit=1 режим, потому что полученный InnoDB
блокировки таблицы были бы сразу выпущены.
Невозможно заблокировать дополнительные таблицы в середине транзакции потому что LOCK TABLES
выполняет неявное COMMIT и UNLOCK TABLES.
Предел 1023 параллельных изменяющих данные транзакций был повышен в MySQL 5.5 и выше. Предел теперь 128 * 1023 параллельных транзакции, которые генерируют записи отмены. Можно удалить любые обходные решения, которые требуют изменения надлежащей структуры Ваших транзакций, таких как фиксация более часто.