Wykonuję indeksy do tabeli z milionami rekordów, które są używane do wyszukiwania wyników. Wyświetlam wyniki według zamówienia ASC lub DESC. Moje pytanie brzmi, czy kolumna powinna mieć indeks, czy nie? Mam 2 dodatkowe indeksy na tym stole. W jaki sposób wpłynie to na wydajność, wprowadzając indeks do tej kolumny, czy nie?Porządek według kolumny powinien mieć indeks, czy nie?
Odpowiedz
Porządek według kolumn służy do porządkowania zestawu wyników, a nie filtrowania. Indeks na kolumnach wymienionych w klauzuli "porządek" raczej nie zmieni niczego, zwłaszcza jeśli nie jest używany do filtrowania danych.
: Ta kolumna będzie używana również w tym stanie. Jak wpłynie to na czas złożoności zapytania? –
Dodanie indeksu powinno skrócić czas. Bez spojrzenia na plany wykonania kwerendy lub zapytania nie ma możliwości dowiedzenia się. – Sathya
Ok. Sprawdzę wtedy plany realizacji zapytań. Dzięki. –
Właściwie - dla niektórych milionów wierszy lepiej zastosować dobrze przemyślany indeks, to nie jest tak duży zbiór danych, by zacząć martwić się kwestiami związanymi z przestrzenią kosmiczną.
ale
Jeśli czytasz tę tabelę raz dziennie i zmiana/usuwanie wierszy 100 razy na sekundę - to efekt z indeksu może pogorszyć osiągi podstawowych operacji, podczas occasinally wybierając wykona lepiej.
Więc odpowiedź jak zwykle - zależy
To jest logika wyszukiwania. Zatem tabela będzie odczytywana 10000 razy niż jeden zapis. Co powinienem zrobić? –
Zdecydowanie dobry indeks - to twój przypadek –
Korzystanie ORDER BY na indeksowana kolumna nie jest dobrym pomysłem. W rzeczywistości celem używania indeksu jest przyspieszenie wyszukiwania, więc kolumna indeksu pomaga w utrzymaniu danych w posortowanej kolejności. Zasugeruję ci użycie ORDER BY w nieindeksowanej kolumnie. Uruchomiłem próbkę zapytania w MySql i otrzymałem wynik jak wspomniano poniżej.
SELECT
ci.id AS item_id, ci.brand_id, ci.category_id,
ci.item_size_type, ci.is_express_processing, ci.packing,
ci.parent_service_id, ci.product_id, ci.size,
ci.create_date AS item_create_date, cis.service_id, cis.quantity
FROM
cart AS c
INNER JOIN
cart_items AS ci ON ci.cart_id = c.id
LEFT JOIN
cart_item_services AS cis ON cis.item_id = ci.id
WHERE
c.id = 144
ORDER BY
c.create_date;
Tutaj używam ORDER BY
na nieindeksowane kolumnie create_date
i wynik jest następujący:
# Time: 2017-11-03T10:30:33.237056Z
# [email protected]: root[root] @ localhost [] Id: 3
# Query_time: 0.000340
# Lock_time: 0.000154 Rows_sent: 2 Rows_examined: 4
A teraz mam zamiar użyć ORDER BY
na kolumnie indeksowanej item_id
:
SELECT
ci.id AS item_id, ci.brand_id, ci.category_id,
ci.item_size_type, ci.is_express_processing, ci.packing,
ci.parent_service_id, ci.product_id, ci.size,
ci.create_date AS item_create_date, cis.service_id, cis.quantity
FROM
cart AS c
INNER JOIN
cart_items AS ci ON ci.cart_id = c.id
LEFT JOIN
cart_item_services AS cis ON cis.item_id = ci.id
WHERE
c.id = 144
ORDER BY
item_id;
Teraz otrzymałem wynik w następujący sposób.
# Time: 2017-11-03T10:30:47.802392Z
# [email protected]: root[root] @ localhost [] Id: 3
# Query_time: 0.000383
# Lock_time: 0.000176 Rows_sent: 2 Rows_examined: 4
więc w powyższym wyniku widzimy indeksowanych kolumn Query_time i Lock_time jest wyższa niż kolumny nie indeksowane.
Dla bardziej szczegółowej analizy o standardzie kwerendy i wydajność można odnieść poniżej linkiem:
- 1. Porządek uporządkowania według kolumny obliczeniowej
- 2. Uzyskaj indeks kolumny według nagłówka kolumny w WPF DataGrid
- 3. datagridview indeks kolumny
- 4. Elasticsearch porządek agregacji według najwyższego wyniku trafienia
- 5. Django pełny porządek wyszukiwanie tekstu według trafności
- 6. Serwer SQL - porządek według nazwy z podkwerendy
- 7. ASP MVC ChildActionOnly powinien mieć routing
- 8. Czy mój ViewModel powinien mieć ObservableCollection widoków lub ViewModels?
- 9. Pandy Pythona - Data kolumny do kolumny Indeks
- 10. Ostrzeżenie: React.createElement: typ nie powinien mieć wartości null ani undefined.
- 11. MySQL COUNT NULL zawartość według kolumny, GROUP według kolumny
- 12. Jaką rozdzielczość powinien mieć ikona mojego iPhone'a?
- 13. Czy mogę mieć statyczny indeks dolny w Swift?
- 14. Czy jest możliwy dostęp do kolumny danych Silverlight DataGrid przez nazwę, a nie przez indeks kolumny?
- 15. pobierz indeks kolumny z zakresu
- 16. sortować według kolumny Linux
- 17. sortowanie listview Sortowanie według określonej kolumny
- 18. Rozpakuj tablicę NumPy według kolumny
- 19. Jak możemy sprawdzić, czy tabela ma indeks, czy nie?
- 20. C++ pobierz indeks elementu tablicy według wartości
- 21. Czy można zmienić indeks kolumny w migracji rails 3?
- 22. Zdobądź indeks kolumny z nazwy kolumny w pand Pythona
- 23. Porządek wyszukiwania indeksera HttpRequest
- 24. Python python kategorię według kolumny
- 25. Czy prawdziwy path.py powinien wstać?
- 26. Ranking pand według wartości kolumny
- 27. Wybieranie kolumny pandy według lokalizacji
- 28. Ext js sortowanie kolumny niestandardowej według zawartości
- 29. Ustaw szerokość kolumny JTable według wartości procentowej
- 30. Jaki rodzaj procesu tworzenia oprogramowania powinien mieć samotny programista?
Możliwy duplikat http://stackoverflow.com/questions/7475332/mysql-index-for-group- by-order-by –
@Tichodroma: Widziałem to pytanie wcześniej było o grupie przez. Mój scenariusz jest inny. Potrzebuję indeksu dla kolumny z warunkiem (gdzie) dla filtra wyszukiwania. –