Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
Новости
Последние поступления
Книжный магазин
  Hardware:
Видеоустройства
Системные платы
Процессоры
Мобильные устройства
Аудиосистема
Охлаждение системы
Накопители информации
КПК и ноутбуки
Телефоны и связь
Периферия
Система
Сети
Разные устройства
 
  Programming:
Web-разработка
Языки программирования
Технологии и теория
Разработка игр
Программная инженерия
 
  Software:
Операционные системы
Windows 7
Базы данных
Обзоры программ
Графика и дизайн
   
  Life:
Компьютерная жизнь
Разные материалы
   
Партнеры
Публикация
Правовая информация
Реклама на сайте
Обратная связь
Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



Поиск: FULLTEXT или LIKE?

Раздел: Software / mySQL @ 18.05.2008 | Ключевые слова: mysql full text like версия для печати

Автор: lauri
Источник: habrahabr

Наверное каждый разработчик подходил к моменту выбора между двумя решениями одной задачи и естесвенно решающим фактором выбора является наиболее быстрый способ (по времени процесса). Так и я в ходе разработки поиска для своей CMS задался вопросом: что лучше, делать поиск по базе используя полнотекстовой индекс или с помощью оператора сравнения LIKE, имея небольшое количество информации.

Для того, чтобы ответить на свой вопрос я провел небольшой опыт: создал таблицу с четырмя полями (два из которых использовались для поиска и были проиндексированы FULLTEXT`ом) содержащую 5 000 строк. Поля по которым производился поиск содержали по 255 символов, случайно выбранных из одного большого текста. Поиск производился так же по случайным словам не короче 4-х символов.

На первом этапе искалось одно слово в одном поле. На втором этапе в одном поле искалось одно из двух слов. На третьем этапе искалось одно из двух слов в обоих полях. На всех этапах поиск производился сначала с помощью конструкции MATCH(имя_поля) AGAINST(`искомый_текст`) потом с помощью LIKE.

Примечание: тестировал на домашнем компьютере AMD 64 X2 4200, 2GB RAM, Apache, MySQL 5.0.

Количество запросов на каждом этапе — 100. Частота — один раз в секунду.

Итоги теста

На графике показано среднее время выполнения поисковых запросов на 3-х этапах.

Честно говоря, я ожидал немного другой заваисимости времени от сложности запроса и четкую границу между типами поисковых запросов. Но это объясняется тем, что поиск по FULLTEXT-индексу учитывает морфологию слова (при установленном дополнении и русской), что и создает дополнительную нагрузку.

Преимущества и недостатки

Преимущества поиска с помощью оператора LIKE:

  • незначительное увеличение времени обработки запроса при увеличении его сложности
  • возможность сортировки результатов
  • универсальность: можно использовать для поиска рпактически по любым типам полей, в отличии от полнотекстового

 

Недостатки LIKE:

  • отсутствие поддержки морфологии
  • отсутствие модификаторов
  • поиск по всем строкам

Преимущества полнотекстового поиска:

  • поддержка морфологии
  • выдача результатов по релевантности
  • наличие модификаторов, схожих с модификаторами в поске Гугла и Яндекса
  • стоп-слова
  • возможность настройки

 

Недостатки:

  • отсутствие возможности сортировки
  • поддержка только VARCHAR и TEXT полей с индексами FULLTEXT
  • ресурсоемкий процесс
  • изначальная поддержка только MyISAM таблиц
  • при установленном ключе FULLTEXT добавление данных в таблицу происходи дольше

 

Эпилог

Эксперимент не претендует на идеальность, но, я считаю, он довольно наглядно показывает различия в скорости между двумя видами поиска, при небольшом размере базы данных. По-моему, мнению оба варианта имеют право на существование, однако в разных ситуациях.

 

UPD: Под разными ситуациями подразумеваются случаи с разным количеством строк в таблице. Оператор LIKE лучше когда записей не огромное количество и он не применим в таблицах с сотнями тысяч строк, по причине того, что поиск, производится по всем записям.

P.S.: прочитать про полнотекстовой поиск можно здесь.

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Software / mySQL


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.