# gibt es was schnelleres als Like



## eddy (14. Mrz 2006)

Hallo,

ich habe einen SQL befehl, der sich dynamisch zusammen baut.

Vereinfacht sieht das so aus!


```
String rsbwhere = "";
						if(!tname.getText().equals(""))
						{
							rsbwhere = "name Like '"+ tname.getText()+"%'";
						}
						if(!truf.getText().equals(""))
						{
							rsbwhere = rsbwhere+" and rufname Like '"+ truf.getText()+"%'";
						}
						String rsb="SELECT * FROM person where "+rsbwhere;
```

Mein Problem ist, das es Unmengen von Zeit braucht eh ein Ergebnis zustande kommt!

Test es ja auch bis jetzt nur auf meinem Rechner und wenn das dann übers netz geht und dann über 100Leute dran hängen, wird das ganze wohl mehrere Sekunden wenn nicht länger dauern!

Was kann ich also noch verwenden außer Like und dem % nach dem Namen.


Hat jemand eine gute IDEE :###


----------



## AlArenal (14. Mrz 2006)

Je nach verwendeter DB sollte man von handgestrickten Volltext-Suchen mit LIKE die Finger lassen und die eingebauten Funktionalitäten nutzen, die einem einen Score zurückliefern, der auch phonetische Ähnlichkeiten berücksichtigt.
Außerdem sollte man wissen wann man wo und wie nen Index auf den Spalte setzt. Komplexe Abfragen sollte man darum mal mit EXPLAIN untersuchen.


----------



## DP (14. Mrz 2006)

kannst höchstens noch unter mysql match versuchen. aber mit dem like 'x%' biste schon ganz gut bei. noch n index anlegen dann sollte das passen.

solltest du '%x%' nutzen, hilft dir kein index.

edit: falls du mysql nutzt, dann stell den index-buffer so ein, dass der ganze index im speicher ist, und nicht von platte gelesen werden muss.


----------



## eddy (14. Mrz 2006)

mmh, schon mal gute hinweise...

Ich nutze MS SQL Server und Oracle!!!

Indexe sind alle schon gesetzt!!!


Also kann ich mit weiteren Performance Höhepunkten nicht rechnen? ???:L


----------



## SnooP (14. Mrz 2006)

dann würd ich mal in die Doku zu MSSQL und Oracle gucken - die untersützen wie oben schon erwähnt soweit ich weiß beide ne Volltextsuche - die dann auch besser als LIKE funktionieren müsste... - liegt dann evtl. auch an den verwendeten Datentypen in den Tabellenspalten...


----------



## Bleiglanz (14. Mrz 2006)

alter Trick wäre eine zusätzliche Spalte mit dem SOUNDEX, die man bei jedem Insert und Update aktualisieren muss (mit Triggern, ist aber trotzdem ein gewaltiger Nachteil)

oder in deinem Fall

Zusatzspalte mit den ersten beiden Buchstaben, index drauf und in where klausel mit aufnehmen

wegen der Redundanz ist das aber nur für echt performancekritische Tabellen sinnvoll


----------

