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

Dlaczego liczność indeksu w MySQL pozostaje niezmieniona po dodaniu nowego indeksu?

Jeśli masz tylko 1 wiersz w tabeli, liczność indeksu powinna oczywiście wynosić 1. To tylko liczenie unikalnych wartości.

Jeśli myślisz o indeksie jako o tabeli przeglądowej opartej na segmentach (jak hash), to liczność to liczba segmentów.

Oto jak to działa:Kiedy budujesz indeks na zestawie kolumn (a,b,c,d) , następnie baza danych sprawdza wszystkie wiersze w tabeli, patrząc na uporządkowane czworaczki tych 4 kolumn dla każdego wiersza. Załóżmy, że Twój stół wygląda tak:

a  b  c  d  e   
-- -- -- -- --  
1  1  1  1  200 
1  1  1  1  300
1  2  1  1  200
1  3  1  1  200

Więc to, na co patrzy baza danych, to tylko 4 kolumny (a,b,c,d):

a  b  c  d  
-- -- -- --
1  1  1  1 
1  2  1  1 
1  3  1  1 

Widzisz, że pozostały tylko 3 unikalne wiersze? To staną się naszymi wiaderkami, ale do tego wrócimy. W rzeczywistości istnieje również identyfikator rekordu lub identyfikator wiersza dla każdego wiersza w tabeli. Nasz oryginalny stół wygląda więc tak:

(row id) a  b  c  d  e   
-------- -- -- -- -- --  
00000001 1  1  1  1  200 
00000002 1  1  1  1  300
00000003 1  2  1  1  200
00000004 1  3  1  1  200

Więc kiedy patrzymy tylko na 4 kolumny (a,b,c,d), tak naprawdę patrzymy również na identyfikator wiersza:

(row id) a  b  c  d 
-------- -- -- -- --
00000001 1  1  1  1
00000002 1  1  1  1
00000003 1  2  1  1
00000004 1  3  1  1

Ale chcemy wyszukiwać według (a,b,c,d), a nie według identyfikatora wiersza, więc tworzymy coś takiego:

(a,b,c,d) (row id)
--------- --------
1,1,1,1   00000001
1,1,1,1   00000002
1,2,1,1   00000003
1,3,1,1   00000004

I na koniec grupujemy razem wszystkie identyfikatory wierszy, które mają identyczne wartości (a,b,c,d):

(a,b,c,d) (row id)
--------- ---------------------
1,1,1,1   00000001 and 00000002
1,2,1,1   00000003
1,3,1,1   00000004

Zobaczyć, że? Wartości (a,b,c,d), które są (1,1,1,1) (1,2,1,1) i (1,3,1,1) stały się kluczami dla naszej tabeli przeglądowej do wierszy oryginalnej tabeli.

Właściwie nic z tego się nie dzieje, ale powinno to dać dobry pomysł na to, jak można wykonać „naiwną” (tj. prostą) implementację indeksu.

Ale najważniejsze jest to:kardynalność mierzy po prostu, ile unikalnych wierszy znajduje się w indeksie. W naszym przykładzie była to liczba kluczy w naszej tabeli przeglądowej, która wynosiła 3.

Mam nadzieję, że to pomoże!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć tekst między 2 znakami za pomocą zapytania w MYSQL?

  2. Zapobiegaj duplikowaniu wartości w bazie danych - mysql

  3. przechowywanie kwot pieniężnych w mysql

  4. Jak rozwiązać BŁĄD 1060:Powiel nazwę kolumny za pomocą Widoki -> Utwórz widok

  5. Symbol wieloznaczny MySQL w wyborze