Wyszukiwanie po jednej kolumnie klucza złożonego czy jest efektywne?

0

Czy jedna kolumn klucza złożonego (z dwóch kolumn) ma takie cechy jak kolumna indeksowana i wyszukania są dokonywane w jednej operacji? (mysql)

0

jeśli jest to pierwsza kolumna w definicji. Dla przykładu jeśli masz indeks na polach (pole1, pole2, pole3, pole4) to zapytania:

  • where pole1 = 1 and pole2 = 2
  • where pole1 = 1 and pole2 = 2 and pole3 = 9
  • where pole1 = 1
    skorzystają z indeksu, zapytanie
  • where pole1 = 1 and pole3 = 2
    skorzysta tylko z części (albo wcale), tzn. zostaną wybrane najpierw rekordy z warunku pole1 = 1a a potem już pełny skan aby wybrać pole3 = 2 LUB jeśli optymalizator uzna, że mu się nie opłaca to od razu przeskanuje całą tabelę
    natomiast zapytanie
  • where pole2 = 2
    nie będzie korzystało z tego indeksu
0

Dzięki.
Czyli kluczowe jest tu wybranie odpowiedniej pierwszej kolumny klucza, takiej po której szuka sie najczęściej.

0

dla większej ilości danych i bardziej skomplikowanych zapytań indeksy tworzy się pod konkretne zapytania. Trzeba wziąć pod uwagę spowolnienie dodawania/zmieniania/usuwania rekordów spowodowane koniecznością aktualizacji indeksów a korzyści płynące z dodania nowych indeksów. Z doświadczenia wiem, że rzadko kiedy da się "wymyślić" podczas projektowania bazy takie indeksy, żeby zawsze było dobrze. Może się też zdarzyć, że podczas normalnej pracy wydajniejsze będą np. trzy indeksy na trzech różnych polach (bo np. ktoś szuka po polu1, ktoś inny po polu2 itp) natomiast przy jakimś skomplikowanym i złożonym raporcie może się okazać, że wskazany byłby jakiś złożony indeks. Zazwyczaj, na początku "życia" bazy, zakłada się proste indeksy, na "oczywiste" pola a w trakcie rozrostu bazy analizuje się problematyczne zapytania i tworzy indeksy

1 użytkowników online, w tym zalogowanych: 0, gości: 1