0 Сообщения: 55 Зарегистрирован: 15.02.05 Откуда: как все, из утробы
Заголовок сообщения: Нагрузка на БД при поиске Добавлено: 30 Август 2005, 10:10:38
Есть таблица с 15 полями. Необходимо выполнить поиск всех записей таблицы, в которых встречается хотя бы одно из слов заданной фразы.
Есть вариант сделать поиск с запросом вида:
select `id`, `firmname` from test where ((`firmname` like "%blah2%") or (`contactperson` like "%blah2%") or (`phone` like "%blah2%") or(`fax` like "%blah2%") or(`email` like "%blah2%") or (`businessdirection` like "%blah2%") or(`projects` like "%blah2%") or(`servicegoods` like "%blah2%") or(`biography` like "%blah2%") or (`about` like "%blah2%") or (`anotherinfo` like "%blah2%")) and ((`firmname` like "%blah2%") or (`contactperson` like "%blah2%") or (`phone` like "%blah2%") or(`fax` like "%blah2%") or(`email` like "%blah2%") or (`businessdirection` like "%blah2%") or(`projects` like "%blah2%") or(`servicegoods` like "%blah2%") or(`biography` like "%blah2%") or (`about` like "%blah2%") or (`anotherinfo` like "%blah2%")) and ((`firmname` like "%blah2%") or (`contactperson` like "%blah2%") or (`phone` like "%blah2%") or(`fax` like "%blah2%") or(`email` like "%blah2%") or (`businessdirection` like "%blah2%") or(`projects` like "%blah2%") or(`servicegoods` like "%blah2%") or(`biography` like "%blah2%") or (`about` like "%blah2%") or (`anotherinfo` like "%blah2%")) and ((`firmname` like "%blah3%") or (`contactperson` like "%blah3%") or (`phone` like "%blah3%") or(`fax` like "%blah3%") or(`email` like "%blah3%") or (`businessdirection` like "%blah3%") or(`projects` like "%blah3%") or(`servicegoods` like "%blah3%") or(`biography` like "%blah3%") or (`about` like "%blah3%") or (`anotherinfo` like "%blah3%"))
/Это запрос "ИЛИ", возможен и вариант с AND, когда ищем совпадения обоих слов, т.е. по "И"/
и другой вариант:
select `id`, `firmname` from test where ((`firmname` like "%blah2%blah3%")
В первом случае мы выполняем поиск всевозможных вариантов, но по моему мнению очень высока нагрузка на БД в случае даже двух слов в фразе. Не говоря уже про три слова и выше.
Во втором случае мы ищем только прямой порядок слов и запрос получается по "И".
Интересно узнать мнение тех, кто уже реализовывал подобные задачки, чем лучше поступиться - производительностью или гибкостью поиска (допустим что все поля поиска проиндексированы/не проиндексированы).
Это завит от структуры таблицы. Если грамотно сделать (что давольно легко... для меня по крайней мере), то поиск (MATCH … AGAINST) будет оочень шустрый!
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.