2010-04-03 4 views
8

Zum Beispiel möchten die Nutzer unserer App Produkte durch Eingabe eines Schlüsselworts von productName suchen.Gibt es bessere Suchmethoden anstelle von String.Contains ("Stichwort") mit asp.net?

Die Products-Tabelle der SQL Server-Datenbank enthält ca. 10 Millionen Datensätze.

Gibt es bessere und leistungsfähigere Suchmethoden anstelle von productName.Contains ("keyword") mit asp.net C# zu implementieren?

Ich verwende jetzt gespeicherte Prozeduren, aber linq to SQL oder Entity Framework sind auch eine Möglichkeit. Nun

+1

Welche Technologie verwenden Sie den Zugriff auf Datenbank? –

+0

Ich verwende jetzt store procedure, aber linq to sql oder entity framework wird auch erlaubt sein. – Mike108

Antwort

5

Wenn Sie eine bessere Leistung wollen, dann Sie in eine full text search aussehen könnte. Beachten Sie, dass dies derzeit von LINQ to SQL nicht unterstützt wird. Sie können jedoch SQL in einer gespeicherten Prozedur schreiben und die gespeicherte Prozedur von Ihrer Anwendung aus aufrufen. Die akzeptierte Antwort für this StackOverflow post empfiehlt, this article zu lesen.

3

Sie könnte dies von der db Seite erreichen mit einem LIKE

LIKE (Transact-SQL)

So etwas wie

DECLARE @Table TABLE(
     Val VARCHAR(50) 
) 

INSERT INTO @Table SELECT 'asdf' 
INSERT INTO @Table SELECT 'tada' 
INSERT INTO @Table SELECT 'foo' 
INSERT INTO @Table SELECT 'bar' 
INSERT INTO @Table SELECT 'test' 
INSERT INTO @Table SELECT 'test foo' 

DECLARE @Lookup VARCHAR(50) 
SELECT @Lookup = 'foo' 

SELECT * 
FROM @Table 
WHERE Val LIKE '%' + @Lookup + '%' 
+0

Gibt es eine bessere und leistungsfähigere Suchmethode als "Gefällt mir" sql? – Mike108

0

Sie sollten nie mehr Daten aus Ihrer Datenbank abrufen, als Sie benötigen. Daher ist es am besten, wenn Sie Ihre Zeilen innerhalb der Datenschicht (dh Ihrer gespeicherten Prozedur) einschränken. Sie können dies tun, indem Sie nur übereinstimmende Zeilen zurückgeben:

SELECT * FROM Products WHERE ProductName LIKE '%' + @keyword + '%' 

Dabei ist @keyword ein Parameter für Ihre Speicherprozedur.

Aber beachten Sie, dass Leistung mit LIKE langsam sein kann, da es die gesamte Tabelle lesen muss. Sie können die Leistung mehr verbessern, indem sie Produkte gefunden, die mit dem Schlüsselwort beginnt:

SELECT * FROM Products WHERE ProductName LIKE @keyword + '%' 

Hinweis Ich entfernte die ‚%‘ vor @keyword. Dadurch kann SQL Server einen Index für die ProductName-Spalte verwenden, um die Zeilen schneller zu finden!

Fore weitere Hilfe, geben Sie bitte Ihre gespeicherte Prozedur schreiben ...

0

könnte viel des Guten, aber lucene.net überprüfen werden, ich glaube, es ist, was Überlauf-Stack nutzt für seine Suche

Verwandte Themen