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

wskaźniki pierwotne vs wskaźniki wtórne:różnice w wynikach

Tablica klastrowana jest B-drzewo bez części „sterty” — wiersze są przechowywane bezpośrednio w strukturze B-drzewa indeksu klastrowania (klucz podstawowy). Węzły B-Tree mogą być dzielone lub łączone, więc fizyczna lokalizacja lub wiersze mogą się zmieniać, więc nie możemy mieć prostego „wskaźnika” z indeksu pomocniczego do wierszy, więc indeks pomocniczy musi zawierać kompletną kopię podstawowe pola indeksowe, aby móc wiarygodnie identyfikować wiersze.

Dotyczy to Oracle, MS SQL Server i także dla InnoDB .

Oznacza to, że indeksy pomocnicze w tabelach klastrowych są „grubsze” niż indeksy pomocnicze w tabelach opartych na stercie, które:

  • zmniejsza grupowanie danych,
  • obniża skuteczność pamięci podręcznej,
  • sprawia, że ​​są droższe w utrzymaniu,
  • a co najważniejsze, ma wpływ na wydajność zapytań:
    • Kwerendy przez indeks pomocniczy może wymagać podwójnego wyszukiwania — jedno wyszukiwanie przez indeks pomocniczy w celu zlokalizowania danych „kluczowych”, a drugie przez indeks podstawowy w celu zlokalizowania samego wiersza (Oracle ma kilka interesujących optymalizacji, aby uniknąć drugiego wyszukiwania, ale InnoDB nie, według mojej wiedzy).
    • Z drugiej strony indeks wtórny naturalnie obejmuje więcej pól, dzięki czemu można by całkowicie uniknąć drugiego wyszukiwania tam, gdzie tradycyjny indeks oparty na stercie wymagałby dostępu do tabeli. Jednak ten sam efekt można osiągnąć w indeksie opartym na stercie, po prostu dodając do niego więcej pól.

Pozwolę sobie zacytować Użyj indeksu, Luke! :"Zalety tabel zorganizowanych według indeksu i indeksów klastrowych ograniczają się głównie do tabel, które nie wymagają drugiego indeksu."

Szkoda, ponieważ MySQL nie pozwala na wybór klastrowania niezależnie od silnika pamięci masowej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 sposoby sprawdzenia typu danych kolumny w MySQL

  2. Czy ograniczenie zapytania do jednego rekordu poprawia wydajność?

  3. Odpowiednik daty i godziny w java.sql ? (czy istnieje java.sql.datetime ?)

  4. Czy w MySQL istnieje sposób na niejawne utworzenie klucza podstawowego dla tabeli?

  5. MySQL w chmurze — zalety i wady Amazon RDS