От оптимизации больше всего выигрывают запросы на выборку, но существуют также методики повышения эффективности других инструкций, в частности INSERT. Можно избежать затрат времени на анализ инструкции, если воспользоваться преимуществами значений по умолчанию. Вместо того чтобы указывать значения всех столбцов, задайте лишь те из них, которые отличаются от стандартных установок, а остальное пусть сделает MySQL. Сказанное иллюстрирует листинг 10.8, в котором показаны определение таблицы и инструкция INSERT
CREATE TABLE address { ID int (11) NOT NULL AUTO INCREMENT, Name Prefix CHAR (16) default NULL, Name First CHAR (32) default NULL,Name Middle CHAR (32) default NULL, Name Last CHAR (64) NOT NULL default,Name Suffix CHAR (16) default NULL,Company CHAR (64) default NULL,Street1 CHAR (64) default NULL,Street2 CHAR (64) default NULL,Street3 CHAR (64) default NULL,City CHAR NOT NULL default ‘’,State Prov CHAR (64) NOT NULL default,Postal Code CHAR (16) NOT NULL default,Country Code CHAR (2) default NULL,Phone1 CHAR (32) default NULL,Phone2 CHAR (32) default NULL,Fax CHAR (32) default NULL,Email CHAR (64) NOT NULL default ‘’,PRIMARY KEY (ID)}; INSERT INTO address (Name First, Name Last) VALUES (‘Leon’, ‘Atkinson’);
Листинг 10.8. (html, txt)
По умолчанию операции записи имеют приоритет над операциями чтения, но программа MySQL не прервет выполнение инструкции SELECT, если в очереди вдруг появится инструкция INSERT. Последняя окажется заблокированной до тех пор, пока инструкция SELECT не завершится. У инструкции INSERT есть также специальный флаг DELAYED, при наличии которого инструкция помещается в очередь без блокирования клиентского приложения, что повышает его оперативность.
Если есть несколько записей, предназначенных для вставки в таблицу, воспользуйтесь многострочной инструкцией INSERT. Еще быстрее работает инструкция LOAD DATA INFILE. Для полной очистки таблицы лучше вызывать инструкцию TRUNCATE TABLE, а не DELETE. В этом случае программа MySQL удалит и снова создаст табличный файл, вместо того чтобы удалять записи одна за другой.
Если в состав инструкции входит сложное выражение, замените его пользовательской функцией. Естественно, это имеет смысл делать только тогда, когда предполагается многократно вызывать инструкцию. О создании собственных функций рассказывается в лекции 13, "Расширение возможностей MySQL".