AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Performanceproblem parambyname und sql like

Performanceproblem parambyname und sql like

Ein Thema von stalkingwolf · begonnen am 10. Okt 2013 · letzter Beitrag vom 10. Okt 2013
Antwort Antwort
Seite 3 von 4     123 4   
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#21

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 14:15
Stimmt... Wobei es dann Verbesserungspotential bei Firebird gibt.
Klar, wenn die Abfrage Parameter verwendet, kann Firebird nicht wissen, ob der Index möglicherweise doch benutzt werden kann (im Falle von "Text%")
Aber spätestens wenn der Parameter übergeben wird, weiß Firebird doch was zutun ist.

Natürlich müsste Firebird dafür den Ausführungsplan neu aufbauen, aber das wäre mit Sicherheit schneller als einen Fulltablescan zu fahren.
Wird der Parameter ersetzt, muss der Ausführungsplan ebenfalls neu aufgebaut werden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 14:27
Man könnte auch das Like durch STARTING ersetzten, dann klappt es auch mit dem Parameter
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#23

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 14:35
das wäre ja dann so was : "%Suche". Jo, könnte besser sein.
Problem ist jedenfalls das LIKE.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 14:55
Nee, sowas wäre das nicht, das % gehört ans Ende. Mich verwundert, dass FB nicht in der Lage sein soll, zu erkennen, ob es bei LIKE einen Index benutzen kann oder nicht. Bei Wildcards am Ende ließe sich ein ggf. vorhandender Index ja sehr wohl benutzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#25

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 15:01
Wie wir eben gelernt haben, tritt das nur bei Parametern auf. Sonst ist Firebird sehr wohl in der Lage einen Index bei Like zu verwenden.
Das Problem bei Parametern ist, dass Firebird beim Prepare ggf. noch keine Parameter kennt. Erst wenn ein Parameter gesendet wird, KÖNNTE Firebird darauf reagieren. Dazu müsste Firebird den Parameter aber auch analysieren...
Und dann ist es auch möglich, weitere Parameter abzuschicken, die das selbe Prepared-Statement verwenden. Das Prepare müsste also erneut durchgeführt werden. (Und somit den Ausführungsplan erneut aufbauen) Das würde die Sache mit dem Prepared-Statements aber wieder sinnlos machen...

Wie ich schon schrieb: Das ginge in diesem Fall zwar sicher schneller als der FullTableScan, aber ggf. ist es in anderen Szenarien nicht erwünscht...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 15:24
Zitat:
Das Problem bei Parametern ist, dass Firebird beim Prepare ggf. noch keine Parameter kennt.
Die Parameter schon, aber deren Inhalt nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#27

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 15:25
Meine ich doch
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#28

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 16:07
Stimmt... Wobei es dann Verbesserungspotential bei Firebird gibt.
Klar, wenn die Abfrage Parameter verwendet, kann Firebird nicht wissen, ob der Index möglicherweise doch benutzt werden kann (im Falle von "Text%")
Aber spätestens wenn der Parameter übergeben wird, weiß Firebird doch was zutun ist.

Natürlich müsste Firebird dafür den Ausführungsplan neu aufbauen, aber das wäre mit Sicherheit schneller als einen Fulltablescan zu fahren.
Wird der Parameter ersetzt, muss der Ausführungsplan ebenfalls neu aufgebaut werden.
Das wiederspricht aber dem Konzept des Prepared Queries, das ja _gerade_ durch den vorbereiteten Plan (meist) schneller ist
also einfach die Prepared Queries so lassen , und im Zweifellsfall das normale Query verwenden
man kann nicht erwarten dass jedes Werkzeug für jede Aufgabe optimal ist.

Das heisst dass für uns Programmierer noch etwas Arbeit übrig bleibt , und uns die Computer nicht so schnell ersetzen werden

Geändert von hstreicher (10. Okt 2013 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#29

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 16:17
Sehr interessantes Thema. Ich habe aber noch eine Anmerkung zu der Testroutine: Da die Daten in der ersten Abfrage ja im Cache landen, hat man nicht mehr die gleichen Bedingungen bei den beiden weiteren Tests. Für eine exakte Messung müsste man den Service jeweils neu starten.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
516 Beiträge
 
#30

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 16:21
Ich habe die Routinen bei mir auch einmal umgedreht und 1 vor 2 gesetzt. Das Resultat war immer identisch. Dabei lieferte "starting with" immer die beste Performance.

Aber ja sonst hast du recht. Allerdings ist bei meiner Testumgebung mit so vielen Daten es irrelevant
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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