SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.05.2009 12:29:21

Ilim
Участник
Зарегистрирован: 07.02.2009
Сообщений: 6

Посоветуйте с оптимизацией и ускорением поиска в большой базе

Исходные, упрощенные, данные:
stat - таблица с небольшими статьями. Поля id, text. Статей - около 100тыс.
Нужно организовать поиск в этих статьях по определенной фразе.
Сделал, в начале, так:
word - таблица со всеми словами, встречающимися в статьях. Поля id, word
index - главная таблица для поиска, в которую записывается, в какой статье, какое слово есть. Поля: word_id, stat_id
Поиск происходит так: запрос разделяется на слова, по каждому слову получаем его id (из word), в index получаем список stat_id, которым соответствуют все word_id.
Все работало неплохо, пока количество статей не стало приближаться к сотне тысяч, таблица index, при этом, выросла примерно до 3млн. записей.
По одному слову ищется достаточно быстро, по двум - уже 10-20сек, по трем - до 30-40сек. Хочется ускорить.

Задумка, на счет которой хочу спросить совета, в следующем.
Вместо большой таблицы index создать отдельные таблицы на каждое слово: w1, w2 ... w50000 ... с одним лишь полем: stat_id
И устроить поиск так: разбивать запрос на слова, по таблице word определять их id, и дальше работать только с несколькими небольшими таблицами, в которых будет, максимум, 10000 записей, а в среднем, 500-1000. Дальше нахожу совпадающие во всех отобранных таблицах stat_id - и все.

Вопросы:
1. Не замедлит ли базу наличие в ней около 50-70 тыс. таблиц?
2. Достаточно ли быстро из такого числа таблиц движок выдергивает нужные?
3. Ускорит ли это поиск?
4. Может у кого есть другие способы решения данного вопроса?

Заранее благодарен за ответы и идеи! smile

Отредактированно Ilim (28.05.2009 12:30:44)

Неактивен

 

#2 29.05.2009 02:07:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Посоветуйте с оптимизацией и ускорением поиска в большой базе

Ух, какая красота smile
А какие запросы и какие ключики на таблицах? Кажется, что у Вас еще не очень большая база.

P.S. Обычно для поиска по тексту используют специальный полнотекстовый индекс. Он умеет
быстро искать слова целиком, и делает многое другое, например, выкидывает стопслова (ведь
наверняка Вы не выкидываете слова типа «и» и «или»?).

Неактивен

 

#3 29.05.2009 07:40:04

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

Re: Посоветуйте с оптимизацией и ускорением поиска в большой базе

Думаю, Вам не помешает посмотреть в сторону http://sphinxsearch.com/ - считается одним из лучших open-source решений для всяческих задач по индексации текста. По скорости работы для специфических задач превосходит MySQL на несколько порядков.

Неактивен

 

#4 29.05.2009 09:17:06

Ilim
Участник
Зарегистрирован: 07.02.2009
Сообщений: 6

Re: Посоветуйте с оптимизацией и ускорением поиска в большой базе

paulus написал:

Ух, какая красота smile
А какие запросы и какие ключики на таблицах? Кажется, что у Вас еще не очень большая база.

P.S. Обычно для поиска по тексту используют специальный полнотекстовый индекс. Он умеет
быстро искать слова целиком, и делает многое другое, например, выкидывает стопслова (ведь
наверняка Вы не выкидываете слова типа «и» и «или»?).

Я тут специально все привел в упрощенном виде. На самом деле и слова, не несущие смысловой нагрузки, выкидываю и, в добавок, привожу все слова в исходные формы. И в результатах поиска выделяю слова, по которым найдена информация.
Будет ли полнотекстовый поиск быстрее? Или нужно экспериментировать? Статьи небольшие, это даже не статьи, а этикетки к ним, в пределах 1000 знаков.
На сегодня уже почти 100тыс. статей. И 3млн. записей в таблице соответствия слов статьям.
Про запрос я писал зимой тут: http://sqlinfo.ru/forum/viewtopic.php?id=1158 - такого плана запрос и стоит пока.

LazY написал:

Думаю, Вам не помешает посмотреть в сторону http://sphinxsearch.com/ - считается одним из лучших open-source решений для всяческих задач по индексации текста. По скорости работы для специфических задач превосходит MySQL на несколько порядков.

Пасиб за ссылку - почитаю. smile

Отредактированно Ilim (29.05.2009 09:19:46)

Неактивен

 

Board footer

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