2010-08-16 10 views
0

J'ai une base de données SQL Server 2008. Cette base de données a 2 tables:Comment améliorer la recherche en texte intégral

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

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

Mon application a un champ de recherche. Je ne sais pas si l'utilisateur va fournir un nom de fabricant ou un nom de produit. De plus, j'essaie d'être un peu gracieux et de gérer les fautes d'orthographe. Dans un effort pour répondre à ce critère, j'utilise la fonction CONTAINSTABLE. Avec cette fonction, je l'ai créé la requête suivante:

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] 

Ma requête effectue très lent avec la fonction CONTAINSTABLE. Sans le second INNER JOIN, la requête s'exécute en moins d'une seconde. Avec le second INNER JOIN inclus, la requête s'exécute en un peu plus de 30 secondes (trop long).

Quelqu'un peut-il fournir des recommandations de performance? Je n'ai aucune idée de comment surmonter cet obstacle.

Merci,

Répondre

0
  • Sélectionnez seulement les champs dont vous avez besoin, et non SELECT *.
  • Les index sur m et p sont-ils définis?
+0

Nous vous remercions de votre réponse. Je sélectionne seulement les champs dont j'ai besoin. En outre, les index sont déjà définis. Voilà pourquoi je suis tellement confus par cela. – Villager

+0

Vous exécutez SELECT * - est-ce vraiment tout ce dont vous avez besoin? – Tobiasopdenbrouw

Questions connexes