Do tabeli dodałem indeksy, które służą do wyszukiwania wyników. Wyświetlam wyniki według kolejności ASC lub DESC. Więc ta kolumna powinna mieć indeks, czy nie? Mam jeszcze 2 indeksy w tej tabeli. Jak wpłynie na wydajność, tworząc lub nie tworząc indeks do tej kolumny?
mysql
performance
index
order-by
Somnath Muluk
źródło
źródło
Odpowiedzi:
Tak, MySQL może używać indeksu dla kolumn w ORDER BY (pod pewnymi warunkami). Jednak MySQL nie może używać indeksu dla mieszanego sortowania ASC, DESC według (
SELECT * FROM foo ORDER BY bar ASC, pants DESC
). Udostępnianie zapytania i instrukcji CREATE TABLE pomogłoby nam bardziej szczegółowo odpowiedzieć na twoje pytanie.Wskazówki dotyczące optymalizacji klauzul ORDER BY: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
Edytuj 21.01.2012 08:53
Pojawiły się pytania dotyczące źródła mojej wypowiedzi na temat używania indeksu z mieszanym ASC / DESC w ORDER BY. Z dokumentacji optymalizacji ORDER BY :
Ponadto słowo kluczowe DESC w CREATE INDEX nie ma znaczenia
źródło
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
powinno działać.ASC
iDESC
jeśliINDEX
ma taką samą mieszankę.Dla każdego, kto zastanawia się nad odpowiedzią dotyczącą PostgreSQL, odpowiedź brzmi: tak, zostanie użyty indeks. Zgodnie z dokumentacją PostgreSQL planista zapytań „rozważy spełnienie specyfikacji ORDER BY albo poprzez skanowanie dostępnego indeksu, który pasuje do specyfikacji, albo przez skanowanie tabeli w fizycznej kolejności i wykonanie jawnego sortowania”. Oznacza to, że jeśli istnieje indeks, którego planista może użyć, zrobi to, wracając do robienia sortowania po pobraniu pasujących wierszy.
źródło