Entschuldigung, dies ist das erste Mal, dass ich dieses Forum nutze. Anscheinend können Leute meinen Beitrag bearbeiten, der, obwohl er hilfreich ist, einige Informationen herausgenommen hat. Ich werde versuchen, es verständlicher zu machen.Wie verbessert man die Geschwindigkeit dieser SQL-Update-Abfrage?
Ich verwende SQL Compact 3.5 als lokale Datenbank. Das Programm ist in VB.NET geschrieben.
Das Problem ist mit der Abfrage einer meiner Tabellen, die zu lange dauert.
Der Spieler Tabelle hat, unter anderem, id
, skill
, school
, weight
, starter
.
id
ist die ID des Spielersskill
ist die Spielstärke des Spielersschool
auf die ID der Schule Tabelle ein Fremdschlüssel Zeige istweight
ist einer von 14 verschiedenen Nummern
Was ich versuche zu tun, ist die starter
value = 'true' für den Spieler mit der höchsten Fertigkeit bei einem bestimmten Gewicht für eine bestimmte Schule. Wenn also 100 Spieler an einer Schule sind, gibt es 14 Starter, einen für jedes Gewicht.
Der Spielertisch hat 170.000 Spieler, jeder hat 1 von 14 verschiedenen Gewichten und jeder gehört zu 1 von 4500 Schulen.
Jemand kommentierte unten und zeigte diese Aussage, die auf dem richtigen Weg zu sein scheint. Ich bin ein Neuling und habe es noch nicht umgesetzt.
"UPDATE p " &
"SET starter = 'TRUE' " &
"FROM player p" &
"JOIN (" &
"SELECT DISTINCT school, weight, MAX(skill) AS MaxSkill " &
"FROM player " &
"GROUP BY school, weight" &
") q ON q.school = p.school AND q.weight = p.weight AND q.MaxSkill =
p.skill"
Ist Gewicht ein Bereich oder eine Zahl? Dh soll nur 14 mit 14 oder auch mit zB 13-15 gewogen werden? –
Einfache Antwort - mach es nicht eine Schule/Gewicht zu einer Zeit. – Bridge
Zeigen Sie ein Beispiel von dem, was Sie als Ausgabe wollen, nicht wirklich klar von Ihrer Frage. – Sparky