rails-created_at kiedy użytkownik na zamówienie trzeba dodać indeks do tabeli?


Cześć dla jednego z moich fotomodelek, które mam:
default_scope :order => 'photos.created_at DESC, photos.version DESC'

Biorąc pod uwagę, że zamawiam przez CREATED_AT i wersję ... Czy powinienem mieć indeks DB na CREATED_AT?
podziękować
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jedna sztuczka, która może być pomocna: w typowych modelach MySql/ActiveRecord będziesz miał
id
jako numeryczny klucz podstawowy (stąd niejawnie indeksowany), który powinien być w tej samej kolejności
created_at
- co oznacza, że ​​zamiast tego możesz zamówić
id
i uzyskać szybką wydajność bez kosztów pisania dodatkowego indeksu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Poniższe informacje są oparte na moim doświadczeniu z PostgreSQL, ale prawdopodobnie będą dotyczyły również MySQL i innych.
Jeśli planujesz pobrać dużą liczbę rekordów z tej tabeli lub użyć paginacji, pomocne będą indeksy pól używanych w
ORDER BY
.
Musisz utworzyć indeks dla wszystkich pól zamówienia w tej samej kolejności. Jeśli pomieszasz
ASC
i
DESC
w swoim
ORDER BY
, będziesz musiał utworzyć indeks z tymi konkretnymi zamówieniami, aby w pełni wykorzystać indeks .
Odpowiednia migracja ActiveRecord dla tabeli zdjęć to:
add_index :photos, [:created_at, :version]

Poleciłbym przyjrzeć się wynikowi
EXPLAIN ANALYZE
z danymi produkcyjnymi przed i po dodaniu indeksu, aby upewnić się, że przyniesie oczekiwany efekt.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właśnie czytałem o tym zeszłej nocy, kiedy dodawałem indeksy do wielu tabel. Krótka odpowiedź brzmi „tak”. Czyn tutaj jest wykonany bardzo elokwentnie:
https://web.archive.org/web/20 ... dexes
https://web.archive.org/web/20 ... dexes
Dłuższa odpowiedź również brzmi `` tak '', ale dlaczego nie przetestujesz jej trochę i nie zobaczysz, ile uzyskasz z niej przebiegu na podstawie interakcji aplikacji z danymi.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się