![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Index bei Like
Hallo Leute,
sagt einmal warum benutze Firebird bei einer Abfrage wie z.B.
Delphi-Quellcode:
Where Strasse like 'Hauptstr%'
keinen Index auch wenn einer vorhanden ist ? Tanja |
AW: Index bei Like
Benutze stattdessen
Code:
Der Plan bei Einsatz von Like benutzt keinen Index, da der Like-Parameter auch mit einer Wildcard anfangen könnte - und da nützt ein Index nichts.
Where Strasse starting with 'Hauptstr'
|
AW: Index bei Like
Zitat:
Jeder halbwegs vernünftiger Parser wird erkennen ob eine Wildcard am Anfang steht oder nicht. |
AW: Index bei Like
Es kommt auch auf die Art des Indizes drauf an.
Einen B-Tree kann man auch teilweise auflösen, also bis zum ersten Wildcard und braucht dann nicht mehr so viel zu durchsuchen. Ein Hash kann dagegen aber nur komplett aufgelöst benutzt werden. |
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Einige DBMS können mehrere Indextypen.
MySQL kann zum BTREE und HASH, je nach verwendeter Speicherengine. Für reine DupplicateChecks ist eine sortierte Liste der Hashs wohl schneller durchsuchbar, als in einem B-Tree in mehrere Ebenen den passenden Ast zu finden. |
AW: Index bei Like
Zitat:
Gut, aber egal: Hash und Sortierung -> geht nicht -> LIKE geht auch nicht. |
AW: Index bei Like
Hi,
Firebird sollte hier einen Index verwenden, wenn dieser für das Feld STRASSE definiert ist. Reinfallen kann man, wenn man hier Parameter verwendet in der Form: where Strasse like :strasse und dann den Parameter strasse auf 'Hauptst%' setzt. Hier kann beim Prepare der Plan nicht ermittelt werden, da nicht klar ist, ob z.B. anstatt 'Hauptsr%' '%Hauptst%' als Wert für den Parameter kommt. Frank [EDIT] Was ich auch schon hatte: Die Selektivität des Index war irgendwie nicht funktionstüchtig... Kann man mit SET STATISTICS INDEX INDEX_NAME neu berechnen lassen. [/EDIT] |
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Das Problem tritt aber auch bei anderen DBMS auf, sogar beim Microsoft SQLServer 2008 R2, dann ist dieser auch schlecht designed.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz