sql >> Databáze >  >> RDS >> PostgreSQL

Složený index se třemi klíči, co se stane, když dotazuji přeskočením prostředního?

Postgres může používat nezaváděcí sloupce v indexu b-stromu, ale v mnohem méně efektivním režimu.

Pokud je první sloupec velmi selektivní (pouze několik řádků na A ), pak stěží zaznamenáte rozdíl ve výkonu, protože obě přístupové metody (dokonce i sekvenční skenování přes omezenou sadu) jsou levné. Požadavek na výkon roste s počtem řádků na A .

Pro případ, který popisujete, doporučuji vytvořit index na (A, C, B) nebo (C, A, B) (jen se ujistěte, že B je poslední) pro optimalizaci výkonu. Tímto způsobem získáte nejlepší výkon pro dotazy na (A, B, C) a na (A, C) podobně.

Na rozdíl od pořadí sloupců v indexu nezáleží na pořadí predikátů v dotazu.

Velmi podrobně jsme to probrali na dba.SE:

Všimněte si, že není nezáleží na tom, zda vedete s A, C nebo C, A pro daný případ:

Existují také některé další úvahy, ale vaše otázka neobsahuje všechny relevantní podrobnosti.



  1. syntaxe mysql na nerovných mnoha hodnotách

  2. Zdroj php mysql_connect je vždy stejný

  3. Problém s regulárním výrazem Postgres

  4. (PHP):Upozornění:include_once, nepodařilo se otevřít stream:Povolení odepřeno