AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Parameter & Prepared
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter & Prepared

Ein Thema von Mavarik · begonnen am 20. Dez 2014 · letzter Beitrag vom 25. Dez 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#1

Parameter & Prepared

  Alt 20. Dez 2014, 16:07
Datenbank: MySQL • Version: x • Zugriff über: Firedac
Hallo Zusammen!

Angeblich sollen ja Prepared-Statements schneller sein, als immer neu das Statement zu übergeben, Richtig?

Wenn ich mit Wireshark mit anschaue was zum MySQL-Server übertragen wird ist das immer das gleiche:

"SELECT * FROM MyTable where ID=1"
"SELECT * FROM MyTable where ID=2"
"SELECT * FROM MyTable where ID=3"
"SELECT * FROM MyTable where ID=4"

Egal ob ich
Delphi-Quellcode:
fdQuery1.SQL.Text := 'SELECT * FROM MyTable where ID=:ID'
fdQuery1.ParamByName('ID').Value := i;
oder

fdQuery1.SQL.Text := 'SELECT * FROM MyTable where ID='+inttostr(I);

Wo ist der Trick?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:17
Der Trick liegt daran auch wirklich prepared Statements zu verwenden.
So wie du es getestet hast, hast du nur Parameter verwendet.


Delphi-Quellcode:
fdQuery1.SQL.Text := 'SELECT * FROM MyTable where ID=:ID'
fdQuery1.Prepare
...
fdQuery1.ParamByName('ID').Value := i;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#3

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:19
Nur zur Kontrolle: ResourceOptions.DirectExecute ist false?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:22
Der Trick liegt daran auch wirklich prepared Statements zu verwenden.
So wie du es getestet hast, hast du nur Parameter verwendet.


Delphi-Quellcode:
fdQuery1.SQL.Text := 'SELECT * FROM MyTable where ID=:ID'
fdQuery1.Prepare
...
fdQuery1.ParamByName('ID').Value := i;
Hatte ich...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:23
Nur zur Kontrolle: ResourceOptions.DirectExecute ist false?
Gute Frage was ist Default?

Hast Du vielleicht ein mini Beispiel?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#6

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:40
Nur zur Kontrolle: ResourceOptions.DirectExecute ist false?
Gute Frage was ist Default?
Default ist schon false. Ich wollte das nur als mögliche Fehlerquelle ausschließen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:55
Wieso sollte dieses Pillepallestatement mit einem Prepare eigentlich schneller werden?
Wäre es denkbar, das der Prepare-Entscheid-O-Mat einfach meint: "Nö, also so nich?".

Versuchs doch mal mit einem Kombinierten SELECT mit JOIN und statischen WHERE, á la:
Code:
SELECT foo
  FROM Tabelle1 join Tabelle2 on ...
 where irgendwas and noch irgendwas
   and Foo = :Parameter
Ich denke, wenn da das Prepare nicht zuschlägt, weiß ich auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Parameter & Prepared

  Alt 20. Dez 2014, 16:56
Dann macht Firedac hier was falsch oder ein Property ist falsch gesetzt.

Letztendlich solltest du das sehen was bei Oracle für MySQL und Prepared Statements beschrieben ist:
http://dev.mysql.com/doc/refman/5.0/...tatements.html
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Parameter & Prepared

  Alt 20. Dez 2014, 17:00
Wieso sollte dieses Pillepallestatement mit einem Prepare eigentlich schneller werden?
Auch solche "Pillepallestatements" sind schneller. Ein paar weniger Bytes auf der Netzwerkstrecke, Keine Analyse des SQL-Statements, Kein Aufbau eines optimale Abfrage, ...

Wäre es denkbar, das der Prepare-Entscheid-O-Mat einfach meint: "Nö, also so nich?".
Bei einem Preparen darf hier keiner was entscheiden. Ich sage ihm "Prepare es". Und dann muss es prepared werden. Obwohl. MySQL gehört ja mittlerweile zu Oracle.
Und was für einen Mist wir mit Oracle schon erlebt haben ... (das ist aber andere Geschichte).

Versuchs doch mal mit einem Kombinierten SELECT mit JOIN und statischen WHERE, á la:
Ich denke das o.g. Beispiel ist nur ein Beispiel um zu verstehen wie Prepared Statements funktionieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Parameter & Prepared

  Alt 20. Dez 2014, 17:06
Ich denke das o.g. Beispiel ist nur ein Beispiel um zu verstehen wie Prepared Statements funktionieren.
Logisch, ich bin aber davon ausgegangen, dass dann auch nur der Parameter neu übertragen wird...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:30 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