Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизировать запрос / 8 сообщений из 8, страница 1 из 1
17.12.2014, 18:04:48
    #38836270
Andrew_nik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Подскажите как можно оптимизировать запрос вида

Код: sql
1.
2.
3.
4.
SELECT
  t1.Name
FROM t1, t2
WHERE INSTR(t2.description, t1.Name) > 0


который ищет ключевые слова из таблицы T1 в таблице T2
...
Рейтинг: 0 / 0
17.12.2014, 18:07:19
    #38836275
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Запросто точно именно такой?
Что-то в нем маловато смысла... Либо не хватает фильтра по таблице t2, либо еще чего-то.
...
Рейтинг: 0 / 0
17.12.2014, 18:13:45
    #38836283
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
miksoft,

Декартово произведение по двум таблицам с фильтрацией по вхождению Name в description. Вполне осмысленный запрос.

Andrew_nik,
Чем вас не устраивает этот запрос в таком виде? Покажите план выполнения.
...
Рейтинг: 0 / 0
17.12.2014, 18:17:44
    #38836286
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
miksoft,

хотя беру свои слова обратно, тут либо группировки либо distinct не хватает, в противном случае могут быть дубль-записи
...
Рейтинг: 0 / 0
17.12.2014, 18:19:10
    #38836290
Andrew_nik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Не устраивает время выполнения - 6 минут
...
Рейтинг: 0 / 0
17.12.2014, 18:21:50
    #38836293
Andrew_nik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
результаты вставляются во временную таблицу с уникальным ключом (Name) это касательно DISTINCT
...
Рейтинг: 0 / 0
17.12.2014, 18:27:47
    #38836304
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Andrew_nikрезультаты вставляются во временную таблицу с уникальным ключом (Name) это касательно DISTINCTНу тогда попробуйте так:
Код: sql
1.
2.
3.
SELECT t1.Name
FROM t1
WHERE EXISTS (SELECT NULL FROM t2 WHERE INSTR(t2.description, t1.Name) > 0)

Так хотя бы поменьше тупого перебора будет.

Хотя фундментально это решать нужно иначе - составлением и поддержанием отдельной таблицы-индекса с соответствиями description-Name.
...
Рейтинг: 0 / 0
17.12.2014, 18:29:51
    #38836306
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Andrew_nik,

Еще можно попробовать решить задачу через полнотекстовый поиск. Он определенно будет быстрее INSTR, LIKE, LOCATE и REGEXP (особенно на больших description)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизировать запрос / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]