На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Индекс по текстовым полям , например TEXT (MEMO)
    У нас тут спор вышел с товарищем vot'ом.
    Он говорит что индекс по таким полям ничего не даёт, т.к. всевозможные комбинации символов невозможно проиндексировать, чтобы потом по ним быстро искать. Другими словами, СУБД вообще не использует индекс для доступа к текстовым полям.
    У нас в БД форума есть индекс FULLTEXT по полю.
    Т.е. если он прав и поиск FULLTEXT мы не используем, то индекс можно просто турнуть, файл похудеет раза в два (и соответственно скорость доступа к нему увелечится, но поиск тогда останется таким же, ни быстрей ни медленней).
    Вопрос: так ли это? Действительно ли текстовые поля не индексируются?
    СУБД MySQL. Но хотелось бы знать как в других СУБД. Может просто имеет смысл перейти на СУБД, где это возможно?
      Была такая проблема у меня в Оракле. Если я не забыл, было так:
      Индекс испольуется при запросах вида like 'some_text%...'
      Не используется при запросах вида like '%some_text%..'
      Ну т.е. сервак, похоже, сортирует строки и не может эфф. использовать индекс если неопределено начало строки.
      Но мне этого хватило, полнотекстовый не нужен был, так что я дальше не копал... сорри, если не по теме.
        Цитата kl @ 10.12.04, 12:00
        Индекс испольуется при запросах вида like 'some_text%...'
        Не используется при запросах вида like '%some_text%..'

        я тоже так знаю. индекс работает если поиск производится начиная с первого символа, иначе нет.

        а конкретно для случая форума, думаю vot прав. при поиске мало кто будет знать именно начало фразы, да и поиск мне кажется устроен по принцыпу like '%text%'.
          Есть такая идея как улучшить поиск.


          Кэшировать результаты


          Например основная таблица типа:

          Id - аутоинкремент
          Text - текстовое поле

          на запрос - провести поиск и записать в базу:

          1) запрашиваемую строку
          2) Ids результатов поиска
          3) max (id)

          При повторном поиске того же самого искать только для id больших того что было в первый раз
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0291 ]   [ 14 queries used ]   [ Generated: 17.07.25, 21:32 GMT ]