Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Поиск mysql like
Просмотров: 358
 
Ответов: 4
Задача сравнительно простая, но нагруженный проект.
Есть поле в таблице varchar(255). В таблице много полей и порядка 300 000 строк, но будет расти примерно до 1 000 000.
Сейчас поиск осуществляется так name LIKE '%$name%' OR name '%$translit%'
Поиск подтормаживает.
В связи с этим есть вариант
вынести полностью в отдельную таблицу search поля id, name и использовать все тот же LIKE '%$name%"'
Ускорит ли это поиск?
Ну и второй вариант морочиться с FULLTEXT, но никогда им не пользовался, есть ли смысл? Судя по докам он обходит меньше строк.
Морфология не важна.
Третий вариант видел в форумах. Разбивать на слова и составить таблицу word index и искать по нему.
В какую сторону копать?
Была подобная задача. Вариант с разбивкой на слова и делать word index поможет.
В таблице с около 15 млн слов поиск шел 0,02 сек примерно. Даже приходилось записывать не полные слова вроде «купила», «купил»,«купи» для того чтобы пользователю не приходилось вводить всё слово.
>>LIKE '%$name%' OR name '%$translit%'
насчёт этого то можно ускорить поиск используя like вот так
LIKE '$name%' OR name '$translit%' т.е. индекс строиться с начала строи и далее, в случае если используется % в лайке вначале то собственно смысла в индексе уже нет. Но если не использовать % в начале лайка то нужно придумывать другую структуру поиска так как не все варианты будет находить.
1)Вынос ид и серч в отдельную таблицу не поможет.
2)ПОставьте сфинкс и забудьте про тормоза в поиске.
habrahabr.ru/blogs/sphinx/
FULLTEXT должен снизить нагрузку, но если у вас используется таблицы типа InnoDB, то придется продублировать поисковый индекс в таблицу типа MyISAM. Если не поможет и доступ к серверу ограничен, то попробуйте Zend Lucene
Третий вариант снизит нагрузку, я думаю, даже лучше чем фул текст, и мне кажется это лучший вариант.
Используя третий вариант Вам не надо будет использовать текстовые движки, просто банальное сравнение строки, это довольно таки быстрая операция, с миллионом должна справиться на ура, можете для теста забить пару миллионов случайных строк, и попробовать.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться