[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск по первой букве и вообще поиск.
Krevedko
И опять заезженая тема.
Все знают, что поиск - это фактически самые ресурсоемкие запросы, особенно если база данных огромна. Чайники не морочаться и все пишут через LIKE, а я вот заморачиваюсь.
Итак, поиск по первой букве...есть несколько вариантов:
1) через LIKE 'a%'
2) через LCASE(LEFT(name,1))='a';
3) создать дополнительно колонку, где будет первая буква слова и искать по ней (надо следить за целостностью, особенно если будут изменения имен, а также это избыточность данных)
...мысли кончились.
А как делаете вы ?



Спустя 6 минут, 47 секунд (20.09.2011 - 12:40) m4a1fox написал(а):
Мож. ajax припрячь сюда. Запросы будут чаше уходит, скорость !!наверно!! увеличится... А про отдельную колонку... ну просто при редактировании нужно будет лишний запрос делать.

Спустя 1 минута, 54 секунды (20.09.2011 - 12:41) Krevedko написал(а):
апдейты явно реже бывают, чем селекты.

Спустя 6 минут, 4 секунды (20.09.2011 - 12:48) kirik написал(а):
В случае с Like нужно создать индекс по первому символу, чтобы быстрее выборка происходила, и индекс не разрастался.
Второй вариант - очень плохой.
Третий вариант нормальный, но мало чем отличается от первого. Лишь усложняет изменение названия.
Ты по EXPLAIN посмотри, вероятно что первый от третьего отличаться не будут, и тогда, используй первый.

Ещё извращенский вариант - вторая табличка с алфавитом smile.gif Но он не удобный и не сильно выгоднее смотрится относительно LIKE.

Спустя 2 минуты, 47 секунд (20.09.2011 - 12:50) Krevedko написал(а):
Цитата
В случае с Like нужно создать индекс по первому символу, чтобы быстрее выборка происходила, и индекс не разрастался.

можно подробнее ? а то я в запросах совсем туго увы sad.gif

Спустя 49 минут, 7 секунд (20.09.2011 - 13:39) Winston написал(а):
Как-то так :)
SELECT SUBSTRING(`field`, 1, 1) AS `char` 
FROM `table`
WHERE `char` = '" . substr(0, 1, $search). "';

Спустя 2 минуты, 35 секунд (20.09.2011 - 13:42) Krevedko написал(а):
ну это типа выборка. а Кирик говорил про создание индекса.
блин..у меня сайт сегодня упал...9% нагрузка при разрешенной 3.5%

blink.gif

Спустя 8 часов, 20 минут, 44 секунды (20.09.2011 - 22:03) kirik написал(а):
Krevedko
типа:
ALTER TABLE `table` ADD INDEX `title_1` ( `title` ( 1 ) ) 

Спустя 13 часов, 47 минут, 43 секунды (21.09.2011 - 11:50) Krevedko написал(а):
спасибочки, попробую.
нашел из-за чего сайт упал, дело не в запросах, но тем не менее.

Спустя 1 день, 2 часа, 3 минуты, 10 секунд (22.09.2011 - 13:54) Krevedko написал(а):
Цитата
ALTER TABLE `table` ADD INDEX `title_1` ( `title` ( 1 ) )


это он создает индекс для первого символа в указываемом столбце, как я понимаю.
а выборку как теперь делать, чтобы по индексу искало ? как обычно через LIKE "v%" ?

Спустя 2 дня, 23 часа, 9 минут, 21 секунда (25.09.2011 - 13:03) Krevedko написал(а):
ап

Спустя 2 минуты, 44 секунды (25.09.2011 - 13:06) inpost написал(а):
Krevedko
"а выборку как теперь делать, чтобы по индексу искало ? как обычно через LIKE "v%"?"
А он разве не ищет по индексу? Запусти через EXPLAIN и посмотри, вроде должен.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.