Поиск по большой базе даных

  • Автор темы Автор темы antono
  • Дата начала Дата начала

antono

Новичок
Поиск по большой базе даных

Уже два дня бьюсь как рыба об лед, никак не могу найти решение. Есть база данных, там ищутся в 3 колонках ключевые слова методом LIKE %word%. Это быстрее чем REGEXP (word) примерно на 50%, это я проверил.
Когда было несколько тысяч записей, все было четко и быстро, но как только закачал несколько десятков тысяч, стало жутко тормозить. Создание индексов не помогает, они только для точного поиска или по началу слова.
Та вот вопрос - как ускорить поиск ключевых слов в больших таблицах? Есть ли вообще варианты и если есть то куда копать?
 
НА засыпку:
А зачем тебе искать именно внутри слова? Именно LIKE %word%?
Это прайс строки? Или что-то другое?
Полнотекстовые индексы не подойдут?
 
Не внутри слова, а внутри строчки, что в принципе почти одно и то же.
Например набирает посетитель слово "игра", поиск должен производится в ячейках, содержащих текст:
"компьютерная игра"
"игра для телефона"
"в суботу олимпийская игра пройдет"

То есть чтобы нашлись все записи содержащие слово "игра"
 
А нельзя нормализовать?
1 таблица - (keyword_id int(11), keyword_normalized varchar(255)),
2 таблица - связи keyword_id/data_id (id данных в исходной таблице)
Киворд нормализованный, естественно.
 
MadMike, это скорее всего не то.

ForJest, спасибо огромное! Это то что нужно было.
 
antono
самый первый ответ был тоже про это)))
:
>>Полнотекстовые индексы не подойдут?
 
Но искать по типу LIKE %word% fulltext не сможет. Только LIKE word%
 
bzik, а разве full-text использует не MATCH (field1, field2) AGAINST ('keyword') ?
 
А еще вот такой вопросик назрел - если сделать запрос с вычислением релевантности:

mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root') AS score
-> FROM articles WHERE MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root');

и еще обрезать его LIMIT 10,10 например - то он покажет только 10 записей. А как узнать сколько всего нашел запрос записей? Это нужно чтобы правильно пронумеровать страницы в результате поиска. Или все таки LIMIT нельзя использовать и нужно искать без него и затем выбирать диапазон скриптом?
 
Сверху