За последние 24 часа нас посетили 24190 программистов и 1642 робота. Сейчас ищут 842 программиста ...

Как лучше сделать поиск по сайту?

Тема в разделе "PHP и базы данных", создана пользователем FalkoN, 19 мар 2012.

  1. FalkoN

    FalkoN Активный пользователь

    С нами с:
    1 апр 2011
    Сообщения:
    184
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Здравствуйте!
    Заморочился поиском по сайту, точнее по БД. Предполагаю два варианта:
    1. Поисковый запрос ищем в БД с помощью LIKE.
    2. Поисковый запрос ищем в БД с помощью MATCH (в БД включаем полнотекстовый индекс).
    Второй вариант вроде как замедляет работу с БД.

    Подскажите, пожалуйста, кто знает, насколько это замедление критично, и вообще, какой способ все-таки наиболее приемлим. Плюсы и минусы каждого варианта.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а аргумент-то можно? я в свое время искал фуллтекстом от 2 символов среди примерно 2 миллионов записей в примерно полутора гиговой таблице. лимит конкуренции 30 запросов в секунду. самый медленный выполнялся за .2 (две десятых) секунды. и эта игрушка не мешала работе еще десятка баз данных на этом же сервере. что нужно считать замедлением?
     
  3. FalkoN

    FalkoN Активный пользователь

    С нами с:
    1 апр 2011
    Сообщения:
    184
    Симпатии:
    0
    Адрес:
    Екатеринбург
    Убедил! ))
    Я просто читал невнимательно: fulltext замедляет загрузку больших объемов данных в БД. А я че-то подумал, что тормозит работу БД. Вот и возник вопросик.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    на этот случай у меня был хитрый ход
    на одном сервере было 3 одинаковых по структуре базы. одна боевая, одна под заполнение и одна чистая. все это дело раз в несколько часов менялось местами
    поиск идет по А. в этот момент Б обновляется. как Б закончит обновляться - будет сделана копия Б в В
    поиск будет по Б, обновлять будем В, скопируем ее потом в А и тд
    фишка в том что базы "под заполнение" и "чистая" содержали только индекс по первичному ключу.
    закончили обновление "под заполнение" - скопировали ее в "чистую" - создали нужный набор индексов - работаем дальше

    на втором сервере соответственно была только одна база, которая имела два состояния - только запись (без индексов, селект запрещен) и только чтение (с индексами, неселект запрещен)

    если индексы не удалять на время обновления - можно повеситься