Laden...

Performance: MySql-Abfrage oder DGV-Schleife

Erstellt von schorge vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.638 Views
S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 8 Jahren
Performance: MySql-Abfrage oder DGV-Schleife

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            
            }
301 Beiträge seit 2009
vor 8 Jahren

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.

16.830 Beiträge seit 2008
vor 8 Jahren

FYI [Artikelserie] SQL: Parameter von Befehlen
Und selbstverständlich ist der SQL Befehl schneller als eine Schleife.

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor 8 Jahren

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...

C
2.121 Beiträge seit 2010
vor 8 Jahren

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...

16.830 Beiträge seit 2008
vor 8 Jahren

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.

3.003 Beiträge seit 2006
vor 8 Jahren

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)

F
10.010 Beiträge seit 2004
vor 8 Jahren

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.

T
67 Beiträge seit 2010
vor 8 Jahren

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.