sein könnte Ich habe eine SQL Server-Tabelle AccountAction
die denormalized ist. Es ist eine verflachte Version der Account
und Action
Tabellen, die ich hoffe, sollte für das Melden von Abfragen über Millionen von Zeilen viel schneller sein. Ein Account
kann viele Actions
haben, so dass die Tabelle ähnelt:SQL, um X Anzahl der Konten von der DB zu bekommen, die Variable Anzahl der Zeilen
Account Action
account1 action1
account1 action2
account1 action10
account2 action5
aber ich einige Probleme, die Informationen zurück für eine begrenzte Teilmenge in einem einfachen Stored Procedure zu bekommen.
select Account, Action
from AccountAction
where ???
Was ich suche ist, um die ersten X-Konten mit all ihren Aktionen zu bekommen. Dies wird eine dynamische Anzahl von Zeilen sein. Wenn ich also die obige Beispieltabelle nutze, würde ich 3 Zeilen erhalten (d. H., Geben Sie mir alle Zeilen für das erste Konto).
(ich habe nichts dagegen, dass der Kontoname in jeder Reihe sein wird - es wird an anderer Stelle geschwenkt)
Habe ich eine ROWNUM oder ähnliches verwenden müssen, um die Zeilen zu beschränken? Ich bin sicher, das muss ein einfacheres Problem sein, als ich bisher gefunden habe.
EDIT
Die Antworten TOP verwendet wird, würde ich in dem Beispiel nicht funktionieren werden wollen 3 Reihen zurück, wenn ich sagte ‚mir geben eine (erste) Konto‘. Aber woher weiß ich, dass es 3 sein wird? Seine Dynamik. Sie können auch nicht sequenziell sein, was wäre, wenn account1s Aktion99 in den Ergebnissen bei 55 Millionen lag.
Das hört sich gut an, obwohl die Leistung über z.B. 100m Reihen? Es wird den Rang in jeder Reihe zuerst richtig machen müssen? – finoutlook
@finoutlook - Es kommt darauf an. Alles, was * tatsächlich * benötigt wird, ist, die Daten in der Reihenfolge "Account" zu haben. Einmal bestellt, kann der Optimierer nur die "N-te" -Instanz davon suchen. Hast du schon einen Index mit "Account" als erstes Feld? Wenn dies der Fall ist, sind die Daten bereits geordnet und Sie verarbeiten nur die Mindestanzahl von Datensätzen. Wenn nicht, füge eins hinzu;) – MatBailie
Cool, ich hatte nicht daran gedacht, sie vorher zu bestellen. Ich könnte das als Teil der Synchronisierung mit der de-normalisierten Tabelle tun. – finoutlook