Все знают, что поиск - это фактически самые ресурсоемкие запросы, особенно если база данных огромна. Чайники не морочаться и все пишут через 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 посмотри, вероятно что первый от третьего отличаться не будут, и тогда, используй первый.
Ещё извращенский вариант - вторая табличка с алфавитом Но он не удобный и не сильно выгоднее смотрится относительно LIKE.
Второй вариант - очень плохой.
Третий вариант нормальный, но мало чем отличается от первого. Лишь усложняет изменение названия.
Ты по EXPLAIN посмотри, вероятно что первый от третьего отличаться не будут, и тогда, используй первый.
Ещё извращенский вариант - вторая табличка с алфавитом Но он не удобный и не сильно выгоднее смотрится относительно LIKE.
Спустя 2 минуты, 47 секунд (20.09.2011 - 12:50) Krevedko написал(а):
Цитата |
В случае с Like нужно создать индекс по первому символу, чтобы быстрее выборка происходила, и индекс не разрастался. |
можно подробнее ? а то я в запросах совсем туго увы
Спустя 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%
блин..у меня сайт сегодня упал...9% нагрузка при разрешенной 3.5%
Спустя 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 и посмотри, вроде должен.
"а выборку как теперь делать, чтобы по индексу искало ? как обычно через LIKE "v%"?"
А он разве не ищет по индексу? Запусти через EXPLAIN и посмотри, вроде должен.