Общие > Базы данных

Немеряная склейка...

(1/3) > >>

Dj Fly:
Народ, посоветуйте, как оптимальным образом добиться быстродействия следующего запроса:

Существуют 5 таблиц абсолютно одинаковой структуры:

word varchar(255) - key
id int(11) - key
rating int(11)

Как видите, индексы повешены на два поля - по которым проходится where...

Необходимо получить список тех id из всех 5 таблиц, которые соответствуют каждому из 5 слов

В каких таблицах содержатся искомые слова - известно заранее - это видно из запроса ниже...

В таблицах - в среднем более 50000 записей в каждой из них.

Выполняется следующий запрос:

select srch.53000.id,(srch.53000.rating+srch.52000.rating+srch.51000.rating+srch.50000.rating+srch.49000.rating) from srch.53000,srch.50000,srch.51000,srch.52000,srch.49000 where (srch.53000.word=\'5\' and srch.50000.word=\'2\' and srch.51000.word=\'3\' and srch.52000.word=\'4\' and srch.49000.word=\'1\') and (srch.53000.id=srch.50000.id and srch.53000.id=srch.51000.id and srch.53000.id=srch.52000.id and srch.53000.id=srch.49000.id and srch.50000.id=srch.51000.id and srch.50000.id=srch.52000.id and srch.50000.id=srch.49000.id and srch.51000.id=srch.52000.id and srch.51000.id=srch.49000.id and srch.52000.id=srch.49000.id) order by (srch.53000.rating+srch.52000.rating+srch.51000.rating+srch.50000.rating+srch.49000.rating) desc limit 1500

Результатом без лимита является 25000 рядов.

Быстродействие именно этого запроса - ажных 8 секунд, что абсолютно недопустимо...

EXPLAIN выдаёт минимум операций равный 26000 то есть выходит, что при таком подходе - быстрее уже некуда...

Может есть другой способ получить сей результат быстрее?

commander:
Dj Fly
Какая БД?

Dj Fly:
MySQL.

commander:
1. "word varchar(255) - key" - не правильно!
2. Попробуй убрать order и операции сложения. это можно сделать и приложением...

Dj Fly:
Выборка ведь идет по полю word (это главный критерий поиска).
Почему ты считаешь что это неправильно?

Насчёт убрать order и sum - из полученных результатов - мы считываем в приложение только 1500 лучших результатов по рейтингу...
А сортиря это в приложении - нам придётся считать все 25000.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии