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

Kardinalita indexu MySQL – výkon versus efektivita úložiště

Vyšší mohutnost znamená lepší výkon při čtení, protože podle definice je ke čtení méně záznamů.

Postup zpracování dotazu takto:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue

, motor by měl provést následující kroky:

  1. Najděte první záznam splňující podmínku.

    To se provádí procházením B-Tree , počínaje kořenovým záznamem.

    Na stránkách se vyhledávání provádí podle B-Tree Odkazy; na stránce se vyhledávání provádí pomocí binárního vyhledávání (pokud nejsou vaše klíče komprimované, v takovém případě se jedná o lineární vyhledávání).

    Tento algoritmus má stejnou účinnost pro sloupce s vysokou i nízkou mohutností. Hledání prvního 3 (na rozdíl od všech 3 ) v těchto seznamech:

    1  2  3  4  5  6  7  8  9  10
    
    3  3  3  3  3  3  3  3  4  4
    

    vyžaduje stejné O(log(n)) kroky.

  2. Procházení indexu, dokud se nezmění hodnota klíče. To samozřejmě vyžaduje lineární čas:čím více záznamů máte, tím více jich musíte procházet.

Pokud potřebujete pouze první záznam:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue
LIMIT 1

, mohutnost sloupce neovlivňuje výkon čtení.

Každý indexový klíč má skrytou další hodnotu:ukazatel záznamu. To je celý smysl indexu:musíte vědět, na který záznam ukazuje.

Vzhledem k tomu, že ukazatel záznamu je podle definice jedinečný, je jedinečný i každý indexový klíč. Položky indexu sdílející stejnou hodnotu klíče jsou seřazeny podle ukazatele záznamu.

Je to proto, aby bylo možné index udržovat:pokud odstraníte záznam s hodnotou indexovaného sloupce sdíleného milionem dalších záznamů, měl by být odstraněn i odpovídající záznam indexu. Ale celý milion záznamů indexu není prohledáván:místo toho se jako další podmínka vyhledávání používá ukazatel záznamu.

Každý indexový klíč je ve skutečnosti jedinečný (i když index nedefinujete jako jedinečný), a proto má maximální možnou mohutnost.

Takže odpověď na vaše otázky zní:ne, mohutnost sloupce neovlivňuje výkon zápisu indexu.




  1. Android:Chyba při kopírování databáze (Sqliite) ze složky aktiv

  2. MySQL a MariaDB Load Balancing s ProxySQL

  3. Alternativa MySQL k T-SQL WITH TIES

  4. Řešení chyby Drop Column v Oracle 18c a 19c