Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Langsamer Like Zugriff (https://www.delphipraxis.net/92210-langsamer-like-zugriff.html)

handson 16. Mai 2007 08:31

Datenbank: MySQL • Version: 5.x • Zugriff über: MySQLDAC von Microolap

Langsamer Like Zugriff
 
Hallo!

Ich habe mal eine Frage zu einer LIKE Abfrage. Ich benutze einen MySQL Server 5.x.

Wenn ich dieses Statement eintragen, dann ist der Datensatz in Bruchteilen von Sekunden da:

SQL-Code:
select * from kunden where mandantenid = '000' and email like 'info%' limit 100
Verändere ich das Statement ein wenig, dann braucht der Server fast eine Minute, um die Daten auszuspucken:

SQL-Code:
select * from kunden where mandantenid = '000' and email like '%info%' limit 100
Info zur Tabelle:

Anz der DS: ca. 250000
Schlüssel liegt auf den Feldern mandantenid und email

Gibt es da vielleicht irgend einen Trick, wie ich die zweite Abfrage auch performant abfragen kann?

Stephan

daddy 16. Mai 2007 08:38

Re: Langsamer Like Zugriff
 
Wiewiele Datensätze enthalten denn die MandantenID '000'? Bei der zweiten Abfrage müssen für EMail auf jeden Fall ALLE Datensätze ausgewertet werden. Der Index auf EMail kann hierfür nicht verwendet werden. Bei der ersten Abfrage dagegen schon.

Gruß Daddy

Bernhard Geyer 16. Mai 2007 08:39

Re: Langsamer Like Zugriff
 
As designed. Wenn du bei einer Like-Abfrage als erstes Zeichen ein Wildcard hast so muß die Datenbank einen Full-Table-Scan durchführen da kein vorhander Index mehr verwendet werden kann.

Wieviel Speicher darf der MySQL-Server verwenden? Evtl. wird es schneller wenn der Index komplett im Speicher gehalten werden kann und damit "nur" ein kompletter Indexdurchlauf nötig ist.

handson 18. Mai 2007 12:06

Re: Langsamer Like Zugriff
 
Mandant 000 ist der Größte und beinhaltet ca. 170000 DS.

Das mit dem Full Table Scan habe ich schon befürchtet, hatte gedacht es gibt dafür noch eine andere Möglichkeit...
Trotzdem Danke erstmal!

Stephan

handson 18. Mai 2007 12:10

Re: Langsamer Like Zugriff
 
Hier die Speicherzuordnung:

read_buffer_size=64K
read_rnd_buffer_size=256K


Ich denke aber, es löst nicht das grundsätzliche Problem...

Stephan

alzaimar 18. Mai 2007 13:21

Re: Langsamer Like Zugriff
 
Wenn Du wirklich nach Textteilen suchen willst, die auch innerhalb eines Textes vorkommen können, dann musst Du wohl oder übel eine Volltextsuche implementieren. Ich vermute mal, für MySQL gibts sowas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz