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

Má smysl používat index, který bude mít nízkou mohutnost?

Index může pomoci i na polích s nízkou mohutností, pokud:

  1. Když je jedna z možných hodnot ve srovnání s ostatními hodnotami velmi vzácná a vy ji hledáte.

    Například je velmi málo barvoslepých žen, takže tento dotaz:

    SELECT  *
    FROM    color_blind_people
    WHERE   gender = 'F'
    

    by s největší pravděpodobností těžil z indexu na gender .

  2. Když mají hodnoty tendenci být seskupeny v pořadí tabulky:

    SELECT  *
    FROM    records_from_2008
    WHERE   year = 2010
    LIMIT 1
    

    Ačkoli existují pouze 3 zde jsou různé roky, záznamy s dřívějšími roky jsou s největší pravděpodobností přidány jako první, takže před vrácením prvního 2010 by muselo být naskenováno velmi mnoho záznamů záznam, pokud ne pro index.

  3. Když potřebujete ORDER BY / LIMIT :

    SELECT  *
    FROM    people
    ORDER BY
            gender, id
    LIMIT 1
    

    Bez indexu filesort by bylo vyžadováno. I když je to poněkud optimalizované, dodržujte LIMIT , stále by to vyžadovalo úplné prohledání tabulky.

  4. Když index pokrývá všechna pole použitá v dotazu:

    CREATE INDEX (low_cardinality_record, value)
    
    SELECT  SUM(value)
    FROM    mytable
    WHERE   low_cardinality_record = 3
    
  5. Když potřebujete DISTINCT :

    SELECT  DISTINCT color
    FROM    tshirts
    

    MySQL použije INDEX FOR GROUP-BY a pokud máte málo barev, bude tento dotaz okamžitý i s miliony záznamů.

    Toto je příklad scénáře, kdy je index na poli s nízkou mohutností více efektivnější než na poli s vysokou mohutností.

Všimněte si, že pokud DML výkon není příliš důležitý, pak je bezpečné index vytvořit.

Pokud se optimalizátor domnívá, že index je neefektivní, index prostě nebude použit.



  1. Top 5 funkcí, které musí vaše platforma pro sledování výkonu databáze SQL Server poskytovat

  2. CodeIgniter Vyberte dotaz

  3. Více formulářů a jedna stránka zpracování

  4. MySQL CURRENT_TIMESTAMP jako DEFAULT