Поиск в нескольких таблицах с полнотекстовым - PullRequest
4 голосов
/ 21 декабря 2009

Я пытаюсь сделать подробный поиск с помощью ASP и полнотекстового SQL Server.

Когда ключевое слово отправлено, мне нужно искать в нескольких таблицах. Например,

Таблица - Члены

  • member_id
  • contact_name

Таблица - Образование

  • member_id
  • school_name

Мой запрос;

select mem.member_id, mem.contact_name, edu.member_id, edu.school_name from Members mem FULL OUTER JOIN Education edu on edu.member_id=mem.member_id where CONTAINS (mem.contact_name, '""*"&keyword&"*""') or CONTAINS (edu.school_name, '""*"&keyword&"*""') order by mem.member_id desc;

Этот запрос работает, но для его выполнения требуется очень много времени.

Изображение с ключевым словом Phill; Если mem.contact_name соответствует, укажите его, или, если edu.school_name matches, укажите тех, чье образование соответствует ключевому слову.

Я надеюсь, что смогу объяснить хорошо :) Хотя, извините за мой английский.

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Возможно, попробуйте индексированное представление, содержащее объединенный набор данных - вы можете добавить туда полнотекстовый индекс вместо отдельных таблиц, и он может быть расширен до любого количества таблиц, которое вам нужно. Единственный трюк, конечно, это пространство ...

0 голосов
/ 21 декабря 2009

Пара моментов, я не понимаю, что повлияет на вашу скорость.

  1. Вам действительно нужно полное внешнее соединение? Это убивает тебя. Похоже, эти таблицы один в один. В таком случае вы не можете сделать это внутренним соединением?
  2. Не можете ли вы передать список столбцов, чтобы содержать как это:

    SELECT mem.member_id,
         mem.contact_name,
         edu.member_id,
         edu.school_name
    FROM members mem
        INNER JOIN education edu ON edu.member_id = mem.member_id
    WHERE Contains((mem.contact_name,edu.school_name),'*keyword*')
    ORDER BY mem.member_id DESC 
    

Дополнительная информация о содержит .

...