Ich habe eine Daten.Tabelle, die zwei Schlüssel hat: Jahr (10 Ebenen) und MemberID (200.000 Ebenen). Wenn ich setkey, führt setkey(MemberID, Year)
zu einer anderen Leistung im Vergleich mit setkey(Year, MemberID)
? Wenn ja, welcher Weg wird besser?Ist die Reihenfolge der Schlüssel in data.table wichtig?
Antwort
Die Leistung und Geschwindigkeit der Tasteneinstellung hängt von den Schlüsselvariablentypen ab. numeric
Spalten sind langsamer als integer
. character
Spalten (wenn kurze Zeichenfolgen) scheinen schnell zu sein.
zB
library(data.table)
set.seed(1)
DIC <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIC2 <- copy(DIC)
DIF <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(as.factor(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DIF2 <- copy(DIF)
DNC <- data.table(year = sample(as.numeric(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DNC2 <- copy(DNC)
DCC <- data.table(year = sample(as.character(seq_len(10)), 5e6, TRUE), id = sample(as.character(seq_len(2e5)), 5e6, TRUE), z = rnorm(5e6))
DCC2 <- copy(DCC)
DII <- data.table(year = sample(seq_len(10), 5e6, TRUE), id = sample(seq_len(2e5), 5e6, TRUE), z = rnorm(5e6))
DII2 <- copy(DII)
Einige Timings
# key of integer, character columns
system.time(setkey(DIC, year ,id))
user system elapsed
3.21 0.11 3.31
system.time(setkey(DIC2, id, year))
user system elapsed
3.43 0.03 3.45
# key of integer factor columns
system.time(setkey(DIF, year ,id))
user system elapsed
6.31 0.05 6.37
system.time(setkey(DIF2, id, year))
user system elapsed
6.44 0.06 6.54
# key of numeric, character columns
system.time(setkey(DNC, year ,id))
user system elapsed
9.91 0.07 10.29
system.time(setkey(DNC2, id, year))
user system elapsed
10.11 0.07 10.34
# key of two character columns
system.time(setkey(DCC, year ,id))
user system elapsed
3.34 0.05 3.40
system.time(setkey(DCC2, id, year))
user system elapsed
3.40 0.02 3.42
# key of two integer columns
system.time(setkey(DII, year ,id))
user system elapsed
6.25 0.02 6.53
system.time(setkey(DII2, id,year))
user system elapsed
6.44 0.05 6.64
In Bezug auf welche Art und Weise besser sein wird. Dies hängt wahrscheinlich davon ab, was Sie am wahrscheinlichsten nur für sich alleine tun.
Zum Beispiel können Sie für alle Daten erhalten Jahr 1.
Wenn Sie den Schlüssel als year, id
gesetzt haben, dann können Sie
D[J(1)]
verwenden, aber wenn der Schlüssel wurde eingestellt als id, year
dann würden Sie
D[J(unique(id),1), nomatch = 0]
müssen, der mehr Typisierung und wird länger dauern, da es unique(id)
zu berechnen hat.
Es gibt eine Feature-Anforderung FR#1007, die einen Sekundärschlüssel erlaubt, aber dies ist noch nicht implementiert. Derzeit gibt es einen einzelnen Schlüssel, der mehr als eine Spalte belegen kann.
- 1. Ist die Reihenfolge der xmlns Elemente wichtig
- 2. Easymock: Ist die Reihenfolge der Eroberungen wichtig?
- 3. Ist die Reihenfolge der Catch-Blöcke wichtig?
- 4. Ist die Reihenfolge der Spalten in der Tabelle wichtig?
- 5. Ist die Reihenfolge der impliziten Parameter in Scala wichtig?
- 6. Ist die Reihenfolge der Fälle in PHP-Switch-Anweisungen wichtig?
- 7. Ist die Reihenfolge der Chiffre-Namen in TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList wichtig?
- 8. Ist die Reihenfolge der Ganzzahlen im IceServers-Array wichtig?
- 9. SQL - Ist die Reihenfolge der WHERE-Bedingungen wichtig?
- 10. Ist die Reihenfolge der Dekorierer wichtig für eine Flask-Ansicht?
- 11. Warum ist die Reihenfolge von LEFT JOIN in MySQL wichtig?
- 12. Ist die Reihenfolge von Javascript in einer Seite wichtig?
- 13. Objekte serialisieren/deserialisieren - Reihenfolge der Felder ist wichtig?
- 14. Warum Reihenfolge der Abhängigkeiten Maven wichtig?
- 15. Ist die Reihenfolge der KEYs in einer CREATE TABLE-Anweisung wichtig?
- 16. Ist die Reihenfolge der Spalten in der GROUP BY-Klausel wichtig?
- 17. Hat Java's LinkedHashMap die Reihenfolge der Schlüssel?
- 18. Python: Kreuzung von verschachtelten Listen, in denen Reihenfolge wichtig ist
- 19. Ist die Größe der Datenbankfelder wichtig?
- 20. Python reguläre Ausdrücke ist die Reihenfolge der Alternativen wichtig für die Geschwindigkeit/Auswahl zwischen Alternativen
- 21. Ist die Reihenfolge der Methodendeklarationen in einer Klasse für den Compiler wichtig?
- 22. Ist die Reihenfolge der Header in einer HTTP-Antwort jemals wichtig?
- 23. Ist die Reihenfolge der Regeln in einer einzelnen CSS-Datei wichtig?
- 24. Wie erhält man einen Teilstring zwischen zwei Zeichen, in dem die Reihenfolge der Zeichen wichtig ist?
- 25. Ist die Reihenfolge der Buchstaben R und F in rm -rf (-rf -fr) wichtig?
- 26. Warum ist die Reihenfolge der LET-Anweisungen in dieser Entity Framework-Abfrage wichtig?
- 27. SQL Server - Ist die Spaltenreihenfolge wichtig?
- 28. Ist die Reihenfolge der Schlüssel in einem MongoDB BSON-Dokument von Bedeutung?
- 29. Oracle DB einfach SELECT wo Spalte Reihenfolge ist wichtig
- 30. Ist die Datei project.xcworkspace wichtig?
Vielen Dank, mnel. – AdamNYC