verwendetes Datenbanksystem: MySQL
Ich habe eine Anfänger Performance Frage:
Ich befülle ein DGV - Zeilenweise mit Daten aus MySQL Tabellen (Kein DataSet etc.
hat seine Gründe!)
Jetzt als Beispiel:
Ich habe in Column 5 eine Summe stehen die ich addieren will,
jetzt meine Frage was die performance betriff:
Ist es schneller mit dem MySQL Befehl (MySQL ist abhängig von der Server Geschwindigkeit, LAN Verbindung etc.):
command.CommandText = "SELECT SUM(_TABELLE.COLUMN) FROM _TABELLE WHERE ID= '" + ID_NR + "' ";
oder Schleifenweise das DGV durchlaufen?
foreach(DataGridViewRow row in dataGridView1.Rows)
{
// Summe Addieren
}
Wenn du eh schon ganz sicher alle nötigen Datensätze in deinem DGV hast würde ich vermeiden einen zusätzlichen SQL Command an deinen Server zu senden
EDIT : Zu der eigentlichen Frage -> Eine Abfrage über ein Netzwerk wird nahezu immer langsamer sein als eine lokale Berechnung.
FYI [Artikelserie] SQL: Parameter von Befehlen
Und selbstverständlich ist der SQL Befehl schneller als eine Schleife.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Also,
wenn ich den MySql Server local habe ist das am schnellsten,
sollte aber der MySql Server auf z.B. lahmen NAS liegen, dann
dauert die Abfrage bestimmt länger...
Man sollte die Performance des gesamten Systems sehen. Bremst man den Server unnötig aus wenn man eine weitere Abfrage stellt?
Wir kompliziert wird der Code wenn man eine neue Anfrage stellt?
Ich würde nicht das DGV durchlaufen sondern die dahiinterstehenden Daten. Wenn du doch sowieso schon alles dort selbst einträgst, summier dir die eine Spalte nebenbei auf und schon bist du fertig.
So schnell ist die Anfrage an die DB mit Sicherheit nicht. Die muss erst mal den Befehl auseinandernehmen, die Daten zusammensuchen und und und ... sowas würde mir sehr widerstreben. Macht in allen Punkten nur mehr Arbeit, nämlich dir, dem nächsten der deinen Code liest, der Datenbank, dem Netzwerk...
Ist das eine Summe aus anderen Datenwerten dieses DGV? Dann natürlich nicht via SQL Berechnen.
Lädst Du die Elemente aber gar nicht, die die Summe ergeben, dann natürlich auf dem DB Server.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Selbst wenn du die Elemente, über die die Summe gebildet wird, nicht mitlädst, würde ich die Summe entsprechend als Zusatzfeld beim ursprünglichen Select mit übergeben lassen. Eine zusätzliche Select-Anweisung an die Datenbank oder ein aufsummieren im Grid sind dann beide überflüssig.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Ich befülle ein DGV - Zeilenweise mit Daten aus MySQL Tabellen (Kein DataSet etc.
hat seine Gründe!)
Da gibt es nicht einen Vernünftigen Grund für, ausser es aus Protest nicht so zu machen wie es gedacht ist.
Ich befülle ein DGV - Zeilenweise mit Daten aus MySQL Tabellen (Kein DataSet etc.
hat seine Gründe!)
Na der interessiert mich jetzt aber. Mit einem DataSet/DataTable könntest Du im Programm z.B. mit LINQ arbeiten.