Советы по оптимизации php & mysql
08 03 2007Советы по оптимизации php & mysql
Тот кто хочет получить высокую проиводительность – не пишет просто быстрые скрипты. Для достижения высокой производительности PHP требуется хорошее понимание работы основных аппаратных средств, операционной системы и другого ПО, типа сервера и базы данных
Оптимизация баз данных
Если запрос занимает много времени воспользуйтесь командой EXPLAIN чтобы узнать каким образом Mysql выполняет этот запрос
Explain Select …
Оптимизация таблиц
Optimize table table_name [,table_name]
Выбирайте самый эффективные типы данных:
- mediumint часто оказывается эффективнее int
- обьявляйте колонки как Not null
- избегайте колонок blob, text и varchar
- первичный ключ таблицы должен быть как можно более коротким
- увеличивайте эффективность индекса – если известно что первые Х символом колонки уникальны то генерируйте индекс по этому числу символов
- не делайте индексы для каждой колонки таблицы
Правильно спроектирование базы данных должны иметь индексы, лучшие индексы те – которые создаются в команде Create table и учавстсвуют в множестве запросов. Лишние индексы замедляют запросы на обновление и удаление.
MySQL использует индексы автоматически, чтобы узнать какие индексы используются в текущем запросе нужно использовать команду Explain
Оптимизация запросов SELECT
Для их оптимизации проверьте можно ли добавить индекс. С помощью explain проверьте какие индексы используются и не следует ли их создать.
Оптимизация запросов INSERT
Этого можно добится используя команду INSERT DELAYED вместо INSERT, Клиент получает потверждение о успеной вставке хотя операция на сервере еще не завершена.
При загрузке данных из файла используйте LOAD DATE INFILE что в 20 раз быстрее чем множественные INSERT
Блокировка таблиц перед вставкой ускоряет эту операцию
LOCK TABLES a WRITE ;
INSERT…
INSERT…
UNLOCK TABLES;
Оптимизация запросов UPDATE
Оптимизируйте команды UPDATE как если бы они были SELECT
Оптимизация запросов DELETE
Для того чтобы удалить все записи из таблицы используйте команду TRUNCATE TABLE table_name вместо DELETE
Оптимизация соединений
Можно устанавливать постоянные соединения и избежать создания нового соединения с базой данных для каждого запроса :
mysql_pconnect
Дополнительные советы по оптимизации :
- Избегайте сложных вопросов к таблицам которые много обновлялись
- В таблицах которые часто обновляются следует избегать колонок BLOB и VARCHAR
- Ошибочно делить таблицу на несколько только изза того что она кажется большой.
- Ведите хешированную колонку
Если колонка короткая и данные в ней уникальны это может оказатся быстрее чем индекс по нескольким колонкам
- Используйте значения по умолчанию – вставляйте данные явным образом только когда они не соответствуют со значением по умолчанию
- Используйте колонки auto_increment для создания уникальных значений и ключей
Кэширование
Кэширование – это сохранение данных для будущего повторного использования. Позволяет снизить нагрузку на сервер а также быть сравнительно независимым от источника данных (если база падает то систему продолжает работать на кэше)
Кэшировать можно в базу даных, в файлы, в файл DBM, в совместно используюмую память, в память.
Файл DBM хороший вариант когда работа с БД нежелательна или невозможно создавать по файлу для каждой записи в кэш (пример реализации : www.sleepycat.com)
Управление процессами
В некоторых операционных системах, например, в Windows, создание нового процесса – это медленная операция. Это означает, что CGI процесс, вызываемый для каждой операции, будет работать значительно медленнее. Запуск PHP в multi-threaded (в виде модуля) режиме должно увеличить скорость ответа (примечание: старые версии PHP неустойчивы в данном режиме).
Тогда, когда вы проектируете и кодируете приложение, держите желательные рабочие параметры в памяти,
Категории : PHP Отладка и оптимизация
Обратные ссылки : Нет обратных ссылок »


Обратные ссылки
Нет обратных ссылок