SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.10.2011 16:25:30

walik
Участник
Зарегистрирован: 05.10.2011
Сообщений: 17

Оптимизация LIKE запросов

*Проблема решена*
Добрый день, приведу пример запроса:


SELECT
    `airports`.*,
    `cities`.`name`
FROM
    `airports`
LEFT JOIN
    `cities`
ON
    `cities`.`ISO_city` = `airports`.`ISO_city`
WHERE
    `airports`.`airport_code` LIKE "kiv%"
OR
    `airports`.`ISO_city` LIKE "kiv%"
OR
    `cities`.`name` LIKE "%kiv%"
 


Что я хочу получить от запроса:
Имеется строка для поиска, мне надо получить все записи в которых поле airport_code начинается с этой строки или ISO_city начинается с этой строки или поле name (из другой таблицы)  содержит эту строку (подстроку)
В данном примере строка для поиска - "kiv"

Проблема:
При выполнение запроса, mysql умирает, точнее перезанагружается, оооооочень долго думает.
Если в условии WHERE оставить только поиск по `cities`.`name` LIKE "%kiv%"  то все запросы выполняются быстро, и все ок.

В таблице airports около 4000 записей, в таблице cities около 6000 записей.

Вопрос: Что можно предпринять что бы сервак не вешался и запросы выполнялись быстро ?

Доп. информация:
Данные в таблицах не меняются, они статические.
В данном случае используется тестовый сервак, где я делаю сайты, может на хосте все будет ок ?

*Все, проблема решилась связав эти две таблицы использовав Foreign Keys, и запросы вроде бы выполняются уже нормально быстро и сервак не умирает))

Но если вам есть что посоветовать, все равно буду рад выслушать советы.

Отредактированно walik (05.10.2011 16:46:16)

Неактивен

 

#2 06.10.2011 14:09:17

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Оптимизация LIKE запросов

Мне помогла конвертация полей, по которым происходит поиск посредством LIKE, в BINARY.

Неактивен

 

#3 06.10.2011 15:37:55

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Оптимизация LIKE запросов

А сильная разница во временах получилась? EXPLAIN отличается?

Вообще как-то странно; BINARY - это просто побайтовое сравнение, не должно такого прироста давать; логичным было бы, если бы Вам помогли индексы (airports.airport_code, airports.ISO_city), (cities.ISO_city, cities.name).

Неактивен

 

#4 14.10.2011 18:24:07

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Оптимизация LIKE запросов

EXPLAIN не отличается, но скорость поиска вида «LIKE %var%» выросла в разы.
У меня были проставлены все индексы, но там, где был LIKE, запросы выполнялись сравнительно долго.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson