Mam data.table, który ma dwa klucze: Year (10 levels) i MemberID (200,000 levels). Kiedy ustawiam klucz, czy setkey(MemberID, Year)
powoduje różną wydajność w porównaniu z setkey(Year, MemberID)
? Jeśli tak, to w jaki sposób będzie lepiej?Czy kolejność klawiszy w data.table ma znaczenie?
Odpowiedz
Wydajność i szybkość ustawienia klucza będą zależeć od typu zmiennej kluczowej. Kolumny będą wolniejsze niż integer
. character
kolumny (gdy krótkie ciągi) wydają się być szybkie.
np
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)
Niektóre czasy
# 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
co do których droga będzie lepiej. Prawdopodobnie będzie to zależeć od tego, z czym najczęściej masz do czynienia samodzielnie.
Na przykład, może być konieczne, aby wszystkie dane za rok 1.
Jeśli ustawiono klucz jako year, id
następnie można użyć
D[J(1)]
ale jeśli klawisz został ustawiony jako id, year
wtedy musiałby
D[J(unique(id),1), nomatch = 0]
który jest bardziej typowania i potrwa dłużej, ponieważ musi obliczyć unique(id)
.
Występuje żądanie dotyczące funkcji FR#1007, które wygląda na zezwolenie na klucz dodatkowy, ale nie zostało to jeszcze zaimplementowane. Obecnie istnieje jeden klucz, który może zajmować więcej niż jedną kolumnę.
- 1. Czy kolejność klawiszy ma znaczenie w dokumencie MononDB BSON?
- 2. Czy kolejność kolumn w zapytaniu ma znaczenie?
- 3. Czy kolejność elementów xmlns ma znaczenie
- 4. Webpack: Czy kolejność wtyczek ma znaczenie?
- 5. Czy kolejność subskrybowania i obserwowania ma znaczenie?
- 6. Czy kolejność ukrytych parametrów ma znaczenie w Scali?
- 7. Czy kolejność pozycji w SQL: WHERE IN() ma znaczenie?
- 8. Oracle: czy kolejność kolumn ma znaczenie w indeksie?
- 9. Czy kolejność kolumn ma znaczenie w tabelach MySQL?
- 10. Czy kolejność adresów URL ma znaczenie w mapie witryny XML?
- 11. Czy kolejność łączenia ma znaczenie w języku SQL?
- 12. Czy kolejność dekoratorów ma znaczenie w widoku kolby?
- 13. Dlaczego kolejność importu NgModule ma znaczenie?
- 14. Czy kolejność elementów ma znaczenie dla wbudowanej SVG?
- 15. Dlaczego kolejność zapytań o media ma znaczenie w CSS?
- 16. Czy wersja Mercurial ma znaczenie?
- 17. Czy rozmiar DLL ma znaczenie?
- 18. Polecenie Sed - kolejność flag opcji ma znaczenie? (-ir vs -ri)
- 19. Jak radzić sobie z crossover, gdy kolejność ma znaczenie?
- 20. Porównanie czasu wykonywania algorytmów: dlaczego kolejność wykonywania ma znaczenie?
- 21. Jak zmienić kolejność kolumn data.table?
- 22. Czy kolejność kolumn w indeksie nieklastrowanym w wielu kolumnach ma znaczenie w SQL Server?
- 23. Czy scalanie kierunku ma znaczenie w Mercurial?
- 24. W sprzężeniu iskry, czy kolejność tabel ma znaczenie jak w przypadku świni?
- 25. Czy kolejność opcji -l i -L w łączu GNU ma znaczenie?
- 26. Czy kolejność operandów ma znaczenie przy ocenie równości lub tożsamości w JavaScript?
- 27. czy rozdzielczość obrazu ma znaczenie dla przeglądarek?
- 28. Czy korzystanie z MaxPermSize ma niewielkie znaczenie?
- 29. Czy słowo kluczowe "przeciążenie" ma znaczenie?
- 30. Ma znaczenie, czy wartość jest prymitywna, czy też w pudełku.
Wielkie dzięki, mnel. – AdamNYC