Статьи  : 

Наглядный пример ускорения работы с базой

1 сентября 2012, 21:02

Типичная задача: есть каталог товаров в программе 1С. Из этой программы периодически делаются выгрузки на сайт в формате csv.

Формат строчек файла простой:
код 1С;цена1;цена2;количество

Соответственно, скрипт PHP парсит этот файл, находит товары с соответствующим кодом и обновляет у них цены и количество.

Вроде все просто, но на больших импортах начинаются проблемы: скрипт долго и натужно думает (и может даже вылететь по таймауту). Команда top показывает, что основная нагрузка в это время идет на MySQL. То есть основная причина в базе, а не в PHP или чем-то еще. Клиентом поставлена задача найти источник проблемы.

Для решения внимательно смотрим на ту таблицу, куда идет импорт, и замечаем, что, оказывается, для поля с кодами 1С не сгенерированы ключи! Другими словами, на каждый новый запрос MySQL вынужден заново перелопачивать всю таблицу, чтобы найти одну-единственную строчку. Вот отсюда и была большая нагрузка.

Для решения проблемы оказалось достаточно создать индекс по кодам 1С. В результате время выполнения скрипта:

было – 107 сек.
стало – 4 сек.
Чтобы получить консультацию по вопросу ускорения работы с базой на вашем сайте – пожалуйста, свяжитесь с нами через форму обратной связи.