Базы данных

Что такое медленный SQL-запрос?

Если медленное исполнение запросов носит системный характер, то хостинг может быть заблокирован.

Типичный SQL запрос заключается в просьбе найти и  предоставить данные.

Обычное исполнение запроса заключается в переборе данных, находящихся в таблице. Например, при поиске сообщения на форуме, самым простым способом ответа на  такой вопрос был бы перебор всех сообщений (сравнение номеров сообщений с  требуемым номером).

Индекс в SQL сервере – дополнительная служебная информация в таблице, которая помогает получить ответы на запросы без перебора всего объема данных таблицы. Это в тысячи или десятки тысяч раз меньше, чем требуется для ответа на вопрос обычным способом, без использования индексов.

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

 

Медленные запросы

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

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

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

 

Какие запросы могут быть медленными:

  1. Запрос вида … WHERE adres_post = 'Москва' …
    Это означает отсутствие необходимого индекса по полю adres_post (в данном случае)
    Необходимо создать индекс по соответствующему полю.

  2. Запрос вида … WHERE subj LIKE ‘%…’ …
    В процессе исполнения запроса LIKE использование индексов невозможно. Поэтому рекомендуется переработать алгоритмы (необходимо обратиться к разработчику скриптов)

  3. Запрос вида … FROM t1, t2, t3 WHERE age=22 …
    Запрос-связка нескольких таблиц. Скорее всего либо ошибка при связке таблиц, либо отсутствие индексов.

  4. Возможны и другие случаи.

В заключение необходимо отметить, что для отладки SQL-запросов необходимы технические знания, которые можно получить в открытом доступе, либо обратившись к собственным техническим специалистам.

Показать страницу целиком без оглавления