2010-08-16 4 views
0

У меня есть база данных SQL Server 2008. Эта база данных состоит из двух таблиц:Как улучшить полнотекстовый поиск

Manufacturer 
------------ 
ID, 
Name nvarchar(256) 

Product 
------- 
ID 
ManufacturerID 
Name nvarchar(256) 

Мое приложение имеет поле поиска. Я не знаю, будет ли пользователь указывать имя производителя или название продукта. Кроме того, я пытаюсь быть немного изящным и обрабатывать неправильное написание. Чтобы выполнить эти критерии, я использую функцию CONTAINSTABLE. С помощью этой функции, я создал следующий запрос:

SELECT 
    * 
FROM 
    [Manufacturer] m 
    INNER JOIN [Product] p ON m.[ID]=p.[ManufacturerID] 
    INNER JOIN CONTAINSTABLE(Manufacturer, Name, @searchQuery) r ON m.[ID]=r.[Key] 
ORDER BY 
    r.[Rank] 

Мой запрос исполняющей ОЧЕНЬ МЕДЛЕННО с CONTAINSTABLE функции. Без второго INNER JOIN запрос выполняется менее чем за 1 секунду. При включении второго INNER JOIN запрос запускается чуть более 30 секунд (слишком долго).

Может ли кто-нибудь дать рекомендации по эффективности? Я не знаю, как преодолеть это препятствие.

Спасибо,

ответ

0
  • выбрать только те поля, которые нужны, а не SELECT *.
  • Установлены индексы на m и p?
+0

Благодарим за отзыв. Я только выбираю поля, которые мне нужны. Кроме того, индексы уже установлены. Вот почему я так смущен этим. – Villager

+0

Вы используете SELECT * - это действительно все, что вам нужно? – Tobiasopdenbrouw

Смежные вопросы