sql >> Databáze >  >> RDS >> Mysql

Proč se mohutnost indexu v MySQL nezmění, když přidám nový index?

Pokud máte v tabulce pouze 1 řádek, mohutnost indexu by samozřejmě měla být 1. Jde jen o počítání unikátních hodnot.

Pokud si index představujete jako vyhledávací tabulku založenou na segmentech (jako hash), pak mohutnost je počet segmentů.

Funguje to takto:Když vytvoříte index přes sadu sloupců (a,b,c,d) , pak databáze projde všechny řádky v tabulce a podívá se na uspořádané čtveřice těchto 4 sloupců pro každý řádek. Řekněme, že váš stůl vypadá takto:

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

Databáze se tedy dívá pouze na 4 sloupce (a,b,c,d):

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

Vidíte, že zbývají pouze 3 jedinečné řádky? Ty se stanou našimi vědrami, ale k tomu se vrátíme. Ve skutečnosti existuje také ID záznamu nebo identifikátor řádku pro každý řádek v tabulce. Takže naše původní tabulka vypadá takto:

(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

Takže když se podíváme pouze na 4 sloupce (a,b,c,d), ve skutečnosti se díváme také na id řádku:

(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 my chceme hledat podle (a,b,c,d) a ne podle id řádku, takže vytvoříme něco takového:

(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

A nakonec seskupíme všechna ID řádků, které mají identické hodnoty (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

Vidíš to? Hodnoty (a,b,c,d), které jsou (1,1,1,1) (1,2,1,1) a (1,3,1,1), se staly klíči pro naši vyhledávací tabulku do řádků původní tabulky.

Ve skutečnosti se nic z toho ve skutečnosti neděje, ale mělo by vám to poskytnout dobrou představu o tom, jak lze provést „naivní“ (tj. přímočarou) implementaci indexu.

Ale sečteno a podtrženo:mohutnost pouze měří, kolik jedinečných řádků je v indexu. A v našem příkladu to byl počet klíčů v naší vyhledávací tabulce, který byl 3.

Doufám, že to pomůže!



  1. Pro vyhledávání s připraveným příkazem použijte direktivu IN

  2. IDENTITY() vs IDENTITY() v SQL Server:Jaký je rozdíl?

  3. Vyberte pouze některé sloupce z tabulky na LEFT JOIN

  4. Dotaz MySQL pro určité časové období