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

Jak v MySQL vytvořit index pro urychlení tohoto dotazu?

Chcete-li skutečně odpovědět, bylo by užitečné zjistit, zda již máte existující indexy, ale...

To vše za předpokladu, že tabulka 't' existuje a musíte přidat index a v současné době máte na primárním klíči pouze jeden index nebo žádné indexy.

Krycí index pro dotaz poskytne nejlepší výkon pro vaše potřeby, ale s jakýmkoli indexem obětujete určitou rychlost vkládání. Jak moc na této oběti záleží, závisí na profilu vaší aplikace. Pokud čtete převážně od stolu, nebude to moc důležité. Pokud máte jen několik indexů, nebude záležet ani na mírném zatížení zápisu. Do hry může také vstoupit omezený úložný prostor pro vaše stoly... Musíte provést konečné vyhodnocení kompromisu a zda je znatelný. Dobrá věc je, že je to poměrně stálý hit. Přidání indexu obvykle nezpomalí vaše inserty exponenciálně, pouze lineárně.

Bez ohledu na to, zde jsou vaše možnosti pro nejlepší vybraný výkon:

  1. Pokud je c3 vaším primárním klíčem pro tabulku t, nemůžete v dotazu udělat nic lepšího, abyste jej pomocí indexu zrychlili.
  2. Za předpokladu, že c1 je váš primární klíč t:

    ALTER TABLE t ADD INDEX covering_index (c3,c2);  
    
  3. Pokud c1 není vaše pk (a ani c2), použijte toto:

    ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
    
  4. Pokud je c2 váš PK, použijte toto:

    ALTER TABLE t ADD INDEX covering_index (c3,c1);  
    
  5. Pokud je problémem místo na disku nebo rychlost vkládání, můžete se rozhodnout pro indexování bodů. Obětujete určitý výkon, ale pokud máte vložku těžkou, může to být správná volba:

    ALTER TABLE t ADD INDEX a_point_index (c3);  
    


  1. Zachovat časové pásmo v typu Timestamptz PostgreSQL

  2. Jak vypočítat rozdíl mezi dvěma časovými razítky v Oracle

  3. Příklady převodu ‚date‘ na ‚datetimeoffset‘ v SQL Server (T-SQL)

  4. Jak OBJEDNAT PODLE KAZELU v Doctrine2 (Symfony2)