![]() |
AW: Index bei Like
Zitat:
In Zeichen von SQL-Injection und Co. sollte alle Abfragen Parametrisiert erfolgen. Zitat:
Wenn man konsequent nur nvarchar verwendet ist mir das bisher nicht aufgefallen. |
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Zitat:
Es ist ja wohl so gedacht, dass bei Benutzung der Parameter nur 1 Mal das Prepare erfolgen soll und nicht bei jeder Neuzuweisung eines Parameterwertes. Die gewünschte Zeitersparnis geht hier natürlich in die Hose. Mir würde es anders auch gefallen, aber ob das bei anderen DB' s besser gelöst ist, weiß ich nicht. Ich bin übrigens schon in diese Falle getappt und Thomas Steinmaurer hat das näher erklärt... Frank |
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Zitat:
Sowas war vor 1–2 Jahren mal im Gespräch als bei PHP ein Angriff bekannt wurde, bei dem URL-Parameter so präpariert werden konnten, dass es beim Ablegen der Parameter in einem assoziativen Array (was offenbar bei PHP als Hashmap realisiert ist) möglichst viele Kollisionen gab, mit dem Ergebnis dass man den Server sehr leicht lahmlegen konnte. Ich glaube, die PHP-Entwickler haben es am Ende einfach umgangen, indem sie die maximale Anzahl an Parametern standardmäßig limitiert haben. |
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Zitat:
|
AW: Index bei Like
Hallo,
starting with sucht genau, also Groß- und Kleinschreibung wird beachtet. Heiko |
AW: Index bei Like
Zitat:
PS: Bei PHP wurde offenbar eine Hashmap mit fester Größe verwendet. Die Problematik kann durch eine dynamische Hashmap vermieden werden. Diese würde ihre Größe ggf. (zu viele Kollisionen) einfach verdoppeln. Da dadurch die Hashfunktion verändert wird, sollten die Angriffe ins Leere laufen. Aber wir kommen vom Thema ab. |
AW: Index bei Like
Generell sieht die Verwendung eines Index auf einem Feld c1 bei LIKE wie folgt aus:
Code:
=> Kein Index, da parametrisierte Abfrage und zum Zeitpunkt des Prepare der Inhalt des Parameters nicht bekannt ist.
select * from t1 where c1 like :c1
Code:
=> Kein Index, wenn ein Wildcard als Prefix verwendet wird
select * from t1 where c1 like '%Hugo'
Code:
=> Index
select * from t1 where c1 like 'Hugo'
Code:
=> Index, bei einem Wildcard als Suffix (wird intern ein STARTING WITH)
select * from t1 where c1 like 'Hugo%'
Code:
=> Index
select * from t1 where c1 like upper('Hugo')
Code:
=> Kein Index, da temporäres UPPER auf dem Feld. Abhilfe schafft hier ein Expression-Index, der den UPPER-Inhalt indexiert
select * from t1 where upper(c1) like 'Hugo'
Es gibt sicher noch andere Kombinationen ... :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 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