Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

суперэффективные мускулы

TONY (PORCO@ARGENTINA.COM)

Спецвыпуск: Хакер, номер #063, стр. 063-060-4


минимизируй размер данных

Используй тип данных, наименьший из всех возможных. Если «твое» число заведомо находится в пределах от -1000 до 1000, то не стоит задавать для него тип INTEGER, в то время как вполне можно обойтись MEDIUMINT. Такая замена сэкономит 25% места на диске и памяти. Это фундаментальное правило для оптимизации любой СУБД: данные, меньшие по размеру, обрабатываются быстрее. Кроме того, старайся объявлять колонки таблицы как NOT NULL — ты дополнительно ускоришь обращение к этой таблице и сэкономишь по одному биту на каждую колонку в строке. Для ключевых полей таблицы (PRIMARY KEY) это правило является наиболее критичным.

используй фиксированные данные

Старайся использовать тип CHAR вместо VARCHAR, а также по возможности избегай использовать типы BLOB и TEXT в таблицах, критических по быстродействию. Если эти таблицы являются MyISAM-таблицами, то для них можно указать в опциях фиксированный формат строки (см. рис. «Фиксированный формат строки»).

индексирование данных

Индексированные данные быстро извлекаются из базы данных, но добавление новых строк существенно замедляется ими. Не создавай индексов «на всякий пожарный» — создавай только те индексы, которые реально нужны.

сложные sql-запросы

Если структура твоей базы данных сложна и трудно определить, какой именно запрос порождает немыслимые тормоза, то воспользуйся выражением EXPLAIN — оно расскажет всю правду о том, как именно выполняется запрос (см. рис. «Объяснение запроса»).

блокировка таблиц

Если данные поступают в одну таблицу из разных мест, то применение блокировки таблицы (LOCK TABLES) позволит ускорить работу одного из приложений, записывающих данных. Правда, остальные встанут и начнут молча дожидаться, когда же будет снята блокировка. Из дисковых хранилищ данных самую быструю блокировку таблиц предоставляет MyISAM.

соединение с мускулом

Старайся работать в контексте одного подключения к серверу, так ты снизишь задержки на подключение и отключение от базы данных.

используй значения по умолчанию

Если возможно, задавай полям таблицы значения по умолчанию, и тогда при вставке новой строки (если ты не изменяешь значения таких полей) ты сможешь просто игнорировать их, а сервер сам подставит значение по умолчанию.

итого

Не стоит хвататься за голову и бросаться оптимизировать СУБД, если этого не требуется. Оцени нужную тебе производительность и то, что ты можешь выжать из своего железа. Следуй советам по дизайну данных, используй штатную буферизацию MySQL'а. В крайнем случае откажись от транзакций. Если не помогло, поиграй с таблицами Memory и отложенным переносом данных на диск

Все о MySQL'е

ТИП: WWW

http://dev.mysql.com

http://dev.mysql.com/doc/refman/4.0/ru/mysql-optimisation.html

www.opennet.ru/tips/sml/115.shtml

ВОСПОЛЬЗУЙСЯ МОНИТОРОМ «ЗДОРОВЬЯ» СУБД

KEY BUFFER SIZE УКАЗЫВАЕТ РАЗМЕР КЕША ИНДЕКСОВ ДЛЯ MYISAM-ТАБЛИЦ. РЕКОМЕНДУЕМЫЙ РАЗМЕР — 30% ОПЕРАТИВНОЙ ПАМЯТИ

Назад на стр. 063-060-3  Содержание  Вперед на стр. 063-060-5