Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi QueryParameter und Performance (https://www.delphipraxis.net/169912-queryparameter-und-performance.html)

WizoHulk 21. Aug 2012 07:55

Datenbank: mssql • Version: 2008 • Zugriff über: ADO

QueryParameter und Performance
 
Hi Leute,

ich habe mich im Netzt schon dumm und dämlich gesucht.
worin liegt performanceseitig der Unterschied zwishen Parameterübergabe und SQL Statesments.

Also ....
Code:
ADOQuery1.Parameters.ParamByName('test').Value := 'HalloTest'
und ...

Code:
ADOQuery1.SQL.TEXT := 'INSERT INTO Tabelle (Test) VALUES ('HalloTest')'
ADOQuery1.ExecSQL;
gibt es Überhaupt ein Unterschied?

Furtbichler 21. Aug 2012 08:02

AW: QueryParameter und Performance
 
Fragen dieser Art beantwortest Du am besten selbst mit Hilfe eines SQL-Profiling Tools. Leider ist dies in der Expressversion nicht dabei, aber es gibt ein Freewaretool, mit dem man das testweise untersuchen kann.

Dessenungeachtet: ich meine, das ADO keine Informationen für die Parameter vom SQL-Server abruft, es werden nur die Metainformationen der zurückzuliefernden Daten ermittelt. Ein Insert-Kommando (wofür ich ein ADOCommand oder am Besten gleich die ADOConnection mit ihrer Execute-Methode) hat keinerlei overhead.

Ich würde Dir jedoch raten, wenn irgend möglich, an eine Developer-Lizenz von MSSQL ranzukommen.

Bernhard Geyer 21. Aug 2012 08:09

AW: QueryParameter und Performance
 
Bei nur einen einzelnen Insert wird die (prepared) Parametervariante (wenn man man den Sicherheitsaspekt und Escapen-Problematik außer acht lässt) nicht viel schneller sein als der "direkte" INSERT. Aber ab den zweiten Insert bringt ein prepared Statement sehr viel Performance das der Server nur einmal den Abfrage/Insert-Plan (Was muss ich wo einfügen/aktualisieren/...) berechnen muss.

s.h.a.r.k 21. Aug 2012 08:12

AW: QueryParameter und Performance
 
Zumal man unbedingt die parametrisierte Version nutzen sollte, siehe Bei Google suchenSQL Injection. So umgehst du das Problem weitestgehend.

Zudem hast du einen Geschwindigkeitsvorteil, wenn du mehrfach die gleiche Query, nur mit anderen Daten absendest, da die Datenbank das SQL schon geparst und daher meist im Cache hat. Wenn du hingegen immer einen reinen String schickst, muss dieser Vorteil nicht unbedingt gegeben sein.

p80286 21. Aug 2012 11:10

AW: QueryParameter und Performance
 
Das hat garnichts miteinander zu tun!
Parameter solltest Du allerdings möglichst immer verwenden wenn Du Statements (select.., Insert.., Update..) mit variablen Inhalten verwendest.

Gruß
K-H

s.h.a.r.k 21. Aug 2012 11:12

AW: QueryParameter und Performance
 
Zitat:

Zitat von p80286 (Beitrag 1179008)
Das hat garnichts miteinander zu tun!

Auf welche Aussage beziehst du dich?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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