Советы по оптимизации 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
работает цикл перед циклом.
Используйте массивы и строковые функции везде, где это возможно. Они работают значительно быстрее, чем написание аналогичного кода.
Самый быстрый способ связать многократные небольшие строки в одну – это использовать буфер вывода (ob_start()) и печатать echo в буфер. В конце получить данные функцией ob_get_contents. Это работает, потомучто для буферизации выделяется первоначальный буфер в 40 кб, который растет кусками по 10 кб.
Работая с массивами и объектами используйте ссылки где это возможно. Если это короткий скрипт, и обслуживание кода – это не проблема, вы можете использовать глобальные переменные для сохранения объектов и массивов.
Если у вас много скриптов, использующих переменные сессии, рассмотрите возможность скомпилировать PHP для использования общедоступной памяти для сессий, или используйте RAM диск для их хранения. Включите эти возможности configure –with-mm, затем перекомпилируйте PHP, а также установите session.save handler = mm в php.ini.
Для поиска подстроки, используйте самую быструю команду strpos(), preg_match() и уж затем ereg(). Точно также str_replace() быстрее чем preg_replace(), которая, в свою очередь, быстрее, чем ereg_replace().
Располагайте наиболее часто встречающиеся утверждения switch в самом верху. Если большинство случаев попадает под значение по умолчанию, определите его также в самом начале.
Обработка XML данных регулярными выражениями работает значительно быстрее, чем использование SAX и DOM.
Делайте unset() неиспользуемых более переменных, чтобы освободить память. Это главным образом полезно для ресурсов и больших массивов.
Для классов с глубокой иерархией расширенные функции работают
Комментарии :
Нет комментариев. »
Используйте массивы и строковые функции везде, где это возможно. Они работают значительно быстрее, чем написание аналогичного кода.
Самый быстрый способ связать многократные небольшие строки в одну – это использовать буфер вывода (ob_start()) и печатать echo в буфер. В конце получить данные функцией ob_get_contents. Это работает, потомучто для буферизации выделяется первоначальный буфер в 40 кб, который растет кусками по 10 кб.
Работая с массивами и объектами используйте ссылки где это возможно. Если это короткий скрипт, и обслуживание кода – это не проблема, вы можете использовать глобальные переменные для сохранения объектов и массивов.
Если у вас много скриптов, использующих переменные сессии, рассмотрите возможность скомпилировать PHP для использования общедоступной памяти для сессий, или используйте RAM диск для их хранения. Включите эти возможности configure –with-mm, затем перекомпилируйте PHP, а также установите session.save handler = mm в php.ini.
Для поиска подстроки, используйте самую быструю команду strpos(), preg_match() и уж затем ereg(). Точно также str_replace() быстрее чем preg_replace(), которая, в свою очередь, быстрее, чем ereg_replace().
Располагайте наиболее часто встречающиеся утверждения switch в самом верху. Если большинство случаев попадает под значение по умолчанию, определите его также в самом начале.
Обработка XML данных регулярными выражениями работает значительно быстрее, чем использование SAX и DOM.
Делайте unset() неиспользуемых более переменных, чтобы освободить память. Это главным образом полезно для ресурсов и больших массивов.
Для классов с глубокой иерархией расширенные функции работают
Категории : PHP Отладка и оптимизация
Обратные ссылки : Нет обратных ссылок »


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