2012-09-25 4 views
1

J'ai deux en texte intégral Requêtes de rechercheaméliorer la performance de Full-Text Interroge

Requête 1:

Declare @KEYSEARCH nvarchar(4000)="string search here....". 
SELECT * FROM TABLE1 WHERE CONTAINS(col1,@KEYSEARCH) 

temps exécuter cette requête: 0,2 s

Requête 2:

Declare @KEYSEARCH nvarchar(4000)="string search here....". 
SELECT * FROM TABLE1 WHERE (CONTAINS(col1,@KEYSEARCH) or @KEYSEARCH='%%') 

Temps de cette requête: 11s

Pourquoi la seconde requête est-elle si lente?

+1

Qu'entendez-vous par @KEYSEARCH = '%%'? – Prasanna

+0

Pourriez-vous faire un EXPLAIN? Je veux dire: mettez ce mot-clé devant votre requête. Vous serez en mesure d'avoir des données précieuses pour l'optimisation des requêtes. – Cedric

+0

@prasanna Je soupçonne que le but est de permettre un "caractère générique" spécial qui correspond à tout et renvoie toutes les lignes. –

Répondre

1

Dans ce cas, je soupçonne que le moteur n'est pas assez intelligent pour savoir que vous ne faites rien qui pourrait modifier la variable @keysearch au cours de la requête (ex: certaines astuces pour faire une concaténation agrégée) et il doit donc réexécuter le contrôle ='%%' pour chaque ligne de la table. Cela peut également invalider l'index de texte intégral.

Questions connexes