"We are back" « oc.at

Allgemeine Datenbankfrage [MSSQL tw.]

Hansmaulwurf 09.02.2023 - 14:12 2444 5
Posts

Hansmaulwurf

u wot m8?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
Hi,
Ich hab gerade ein interssantes Problem, und wollte mal kurz Input einholen. Ich hab hier eine Dashboard am laufen, selber gecoded. Das greift auf eine Datenbank zu in der Aggregate sind.

Ich hab mehrere Entitäten die ich im Dashboard darstellen will und die in der DB sind (Standort 1 bis Standort 20), jetzt hab ich zwei Varianten gemacht wie ich es speicher. Zuerst hab ich für jeden Standort einen Table gemacht, hatte also 20 Tables a 1GB. Ich hab das jetzt umgecoded und einen Table der 20GB ist, wo die Station codiert ist.

Variante 2 (große Datenbank) ist signifikant langsamer, einziger Unterschied ist auf welchen Table ich zugreife (selbe DB), Rest vom Code gleich. Ist das "no na, natürlich ist das so" oder sollte das nicht passieren? Ich bin davon ausgegangen das die selects so gut filtern das sich das nicht großartig auswirkt, oder ist das zwangsläufig das größere Datenbanken deutlich langsamer werden? Faktor 10 größer und Faktor 3 langsamer ist ja nicht linear, aber trotzdem eher suboptimal. Bin das erste Mal am Erfahrungen sammeln mit DBs, sorry wenn das a depatte Frage ist :D

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12119
Ich kenne mich mit MSSQL nicht aus, aber bei anderen RDBMS ist das alles eine Frage der (in)korrekten Indizes. Wenn du keinen passenden Index hast, um deine Queries in was anderes als einen Sequential Scan ueber die gesamte Tabelle/Relation optimieren zu lassen, kann die Query-Laufzeit durchaus linear mit dem Umfang dieser Tabelle zu- und abnehmen.

meepmeep

Here to stay
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2337
colo hat wahrscheinlich recht, da würde ein Index sicher helfen. Du musst dir überlegen, nach welchen Kriterien die Daten vorrangig abgefragt werden. Standort-Nummer hätte ich mal rausgelesen. Wenn du einen Index für Standort-Nummer (+ eventuell andere relevante Kriterien) anlegst, dann kann das im Ausführungsplan berücksichtigt werden und du machst keinen Full-Table-Scan mehr.

quilty

Ich schau nur
Avatar
Registered: Jul 2005
Location: 4202
Posts: 3079
Ja, dir fehlen sicher passende Indexe.
Entweder per Tool oder per Hausverstand ausarbeiten welche Sinn machen.
Erste Wahl ist natürlich gleich einmal die Spalte mit dem Standort, aber vermutlich sind Kombinationen aus Standort + weitere Spalte auf die eingeschränkt/sortiert wird (Timestamps z.B.) auch wichtig.

/e/
Da du mit MSSQL unterwegs bist kann der Profiler im SQL Server Management Studio sehr hilfreich sein oder gleich der Database Engine Tuning Advisor dort.
Ich bin selbst kein DBA und spiel mich nur in Ausnahmefällen damit, aber Google spuckt sicher kurze HowTos aus zur Erklärung.
Bearbeitet von quilty am 09.02.2023, 14:35

Hansmaulwurf

u wot m8?
Avatar
Registered: Apr 2005
Location: VBG
Posts: 5639
Danke, der Tipp mit Indexing war es. Bin am Weg dorthin auch draufgekommen das die Spalte für die Standort-ID als float hinterlegt war, das hat sicher auch nicht geholfen.. :bash:
Danke!

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15859
du kannst auch direkt das performance dashboard bzw. den report dafür verwenden
der liefert sehr gute hinweise welcher index was helfen würde
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz