2016-05-03 9 views
0

ich über ein Verfahren, das unter Abfrage des Suchresultates,Charindex in innere Verknüpfung wirkt sich auf die Perfomance

Select 
a.column 
,count(distinct(c.column)) 
from `table1` a with (nolock) 
inner join `table2` b with(`nolock`) on a.id=b.id 
inner join `table3` c with (`nolock`) on charindex(c.colum,a.column)>0 
group by 
a.column 

tabelle1 hat fast 36.000 Zeilen und Abfrage dauert fast 40 Sekunden zum laden hat.

a.column hat fts-Index installiert und es ist XML-Datentyp.

Ich habe versucht, die Joins zu teilen, aber die Ergebnisse variieren aufgrund der Gruppierung.

Wie kann ich diese Abfrage umschreiben, um sie schneller zu machen?

Antwort

0

Wenn Sie eine Spalte mit einer anderen vergleichen, müssen Sie das Schlüsselwort LIKE verwenden. CHARINDEX-, LINKS- und RECHTS-Funktionen ermöglichen dem SQL-Server nicht die Verwendung der Indizes. Was Sie fragen, wenn C.column in A.Column ist,
Lösung ist:
statt:

<CODE> 
    charindex(c.column,a.column)>0 
</CODE> 

Verwenden

<CODE> 
    WHERE a.column LIKE '%' + c.column + '%' 
</CODE> 

Alternativ versuchen, die c abzustreifen. Spalte, so würde es die A.column übereinstimmen.