Spec-Zone .ru
спецификации, руководства, описания, API
|
Эти подсказки по производительности добавляют общие руководящие принципы для быстрых вставок в Разделе
8.2.2.1, "Скорость INSERT
Операторы".
Импортируя данные в InnoDB
, выключите режим
автоматической фиксации, потому что он выполняет сброс данных журнала на диск к диску для каждой
вставки. Чтобы отключить автоматическую фиксацию во время Вашей работы импорта, окружите это SET
autocommit
и COMMIT
операторы:
SET autocommit=0;... SQL import statements
...
COMMIT;
mysqldump опция --opt
создает файлы дампа, которые быстры, чтобы импортировать в InnoDB
таблица, даже не обертывая их с SET autocommit
и COMMIT
операторы.
Если Вы имеете UNIQUE
ограничения на вторичные ключи,
можно ускорить табличный импорт, временно выключая проверки уникальности во время сеанса импорта:
SET unique_checks=0;... SQL import statements
...
SET unique_checks=1;
Для больших таблиц это сохраняет много дискового ввода-вывода потому что InnoDB
может использовать его буфер вставки, чтобы записать вторичный, индексируют записи в пакете. Будьте
уверенны, что данные содержат, не делают дубликаты ключа.
Если Вы имеете FOREIGN KEY
ограничения в Ваших
таблицах, можно ускорить табличный импорт, выключая проверки внешнего ключа на продолжительность сеанса
импорта:
SET foreign_key_checks=0;... SQL import
statements ...
SET foreign_key_checks=1;
Для больших таблиц это может сохранить много дискового ввода-вывода.
Используйте многократную строку INSERT
синтаксис, чтобы уменьшить коммуникационные издержки между
клиентом и сервером, если Вы должны вставить много строк:
INSERT INTO yourtable VALUES (1,2), (5,5), ...;
Эта подсказка допустима для вставок в любую таблицу, не только InnoDB
таблицы.
Когда выполнение объема вставляет в таблицы со столбцами автоприращения, набором innodb_autoinc_lock_mode
к 2 вместо значения по умолчанию 1. См. Раздел
5.4.4.2, "Конфигурируемый InnoDB
Блокировка автоинкремента"
для деталей.
Для оптимальной производительности, загружая данные в InnoDB
FULLTEXT
индексируйте, следуйте за этим
набором шагов:
Определите столбец FTS_DOC_ID
в табличное
время создания, типа BIGINT UNSIGNED NOT NULL
, с названным
уникальным индексом FTS_DOC_ID_INDEX
. Например:
CREATE TABLE t1 (FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT,title varchar(255) NOT NULL DEFAULT ",text mediumtext NOT NULL,PRIMARY KEY (`FTS_DOC_ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1(FTS_DOC_ID);
Загрузите данные в таблицу.
Создайте FULLTEXT
индексируйте после того,
как данные загружаются.
Добавляя FTS_DOC_ID
столбец в табличное время создания,
гарантируйте что FTS_DOC_ID
столбец обновляется когда FULLTEXT
индексированный столбец обновляется, как FTS_DOC_ID
должен увеличиться монотонно с каждым INSERT
или UPDATE
. Если Вы хотите не добавлять FTS_DOC_ID
в табличное время создания и имеют InnoDB
управляйте ID DOC для
Вас, InnoDB
добавит FTS_DOC_ID
как
скрытый столбец со следующим CREATE
FULLTEXT INDEX
вызвать. Этот подход, однако, требует, чтобы таблица восстановила,
который будет воздействовать на производительность.