Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy kolejność pól indeksu wielokolumnowego w MySQL ma znaczenie?

Omawiając indeksy wielokolumnowe posługuję się analogią do książki telefonicznej. Książka telefoniczna to w zasadzie indeks zawierający nazwisko, a następnie imię. Tak więc kolejność sortowania zależy od tego, która „kolumna” jest pierwsza. Wyszukiwania dzielą się na kilka kategorii:

  1. Jeśli wyszukasz osoby o nazwisku Smith, możesz je łatwo znaleźć, ponieważ książka jest posortowana według nazwiska.

  2. Jeśli odszukasz ludzi, których imię to John, książka telefoniczna nie pomoże, ponieważ Johnowie są rozproszeni po całej książce. Aby znaleźć je wszystkie, musisz zeskanować całą książkę telefoniczną.

  3. Jeśli wyszukasz osoby o konkretnym nazwisku Kowalski i konkretnym imieniu Jan, ta książka pomoże, ponieważ znajdziesz Kowalskich posortowanych razem, aw tej grupie Kowale również zostaną znalezione w kolejności posortowanej.

Gdybyś miał książkę telefoniczną posortowaną według imienia, a potem według nazwiska, sortowanie książki pomogłoby ci w powyższych przypadkach #2 i #3, ale nie w przypadku #1.

To wyjaśnia przypadki wyszukiwania dokładnych wartości, ale co, jeśli szukasz według zakresów wartości? Załóżmy, że chcesz znaleźć wszystkie osoby, których imię to John i których nazwisko zaczyna się na literę „S” (Smith, Saunders, Staunton, Sherman itp.). Johnowie są posortowani pod literą „J” w ramach każdego nazwiska, ale jeśli chcesz, aby wszystkie Johny dla wszystkich nazwisk zaczynały się na „S”, Johny nie są zgrupowane razem. Znowu są rozproszone, więc musisz przejrzeć wszystkie nazwiska, których nazwisko zaczyna się na „S”. Natomiast jeśli książka telefoniczna byłaby uporządkowana według imienia, a potem według nazwiska, wszystkie Johny zostałyby zgrupowane razem, a w obrębie Johns wszystkie nazwiska „S” byłyby zgrupowane razem.

Tak więc kolejność kolumn w indeksie wielokolumnowym zdecydowanie ma znaczenie. Jeden typ zapytania może wymagać określonej kolejności kolumn dla indeksu. Jeśli masz kilka typów zapytań, możesz potrzebować kilku indeksów, aby im pomóc, z kolumnami w różnej kolejności.

Możesz przeczytać moją prezentację Jak naprawdę projektować indeksy aby uzyskać więcej informacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Interfejs API kalendarza Google:wybieranie/tworzenie kalendarzy?

  2. Kursor MySql - Tworzenie procedury

  3. Problemy z Django i mysql na Mavericks

  4. Jak naprawić błąd połączenia z bazą danych MySQL JDBC 08001?

  5. php mySQL group concat i group by