sql >> Databáze >  >> RDS >> Oracle

Osvědčený postup použití reverzních indexů na náhradních klíčích? (Věštec)

Obecně platí, že pokud nepoužíváte RAC, není důvod používat index obráceného klíče.

Z hlediska výkonu je pro vás mnohem lepší mít jeden nebo dva aktivní bloky v každém daném okamžiku, které podléhají vkládání, protože to v podstatě zaručuje, že aktivní bloky budou ve vyrovnávací paměti a INSERT nebude muset vynakládat náklady na čtení bloku z disku. Pokud máte vložky vložené do náhodných bloků v indexu, je mnohem větší pravděpodobnost, že požadovaný blok z mezipaměti zestárnul a způsobil by náklady na fyzický I/O.

Náklady na udržení vyváženého indexu jsou poměrně minimální, ale i to dává přednost standardnímu indexu. Pokud máte primární klíč vygenerovaný sekvencí s normálním indexem, Oracle provede Rozdělení bloku 90/10 na pravém bloku, když se tento blok zaplní. Naproti tomu, pokud máte reverzní klíčový index, Oracle musí udělat Rozdělení bloku 50/50 vždy, když se daný blok zaplní. Rozdělení bloku 50/50 zkopíruje polovinu dat ze starého bloku do nového bloku, rozdělení bloku 90/10 zkopíruje pouze datovou hodnotu nejvíce vpravo do nového bloku. Rozdělení bloku 90/10 je proto mnohem levnější než rozdělení bloku 50/50 a budete muset udělat zhruba stejný počet rozdělení bloku bez ohledu na typ indexu, který si vyberete. Náklady na udržování pravidelného indexu jsou tedy nižší než náklady na udržování indexu reverzního klíče, a to i při ignorování efektu mezipaměti.

Důvod, proč byste uvažovali o použití indexu reverzního klíče, by byl ten, že používáte RAC a chcete se vyhnout nákladům na to, že mnoho uzlů RAC bude bojovat o stejný horký blok. Pokud musíte neustále posílat horký blok z jednoho uzlu do druhého, abyste mohli provést další vložení, může být užitečné místo toho použít reverzní index klíče, abyste tento spor omezili. Pokud máte licencovanou možnost dělení, bylo by stále lepší místo toho použít dělený index hash (toto lze provést bez ohledu na to, zda jsou tabulky rozděleny nebo ne). Pokud jste nelicencovali možnost dělení, reverzní klíčový index může být dostatečně dobrý k vyřešení sporu o aktivní blok, abyste nemuseli licencovat dělení.




  1. Používáte LIMIT v rámci GROUP BY k získání N výsledků na skupinu?

  2. pg_restore:[archiver] nepodporovaná verze (1.13) v záhlaví souboru

  3. Časový limit čekání na zámek byl překročen; zkuste restartovat transakci pomocí JDBC

  4. volání jquery ajax pro nastavení vybraných možností z tabulky MySql