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

Jak vybrat a optimalizovat indexy Oracle?

Dokumentace Oracle obsahuje vynikající sadu úvah pro volby indexování:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Aktualizace pro 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D

Cituji:

  • Zvažte indexování klíčů, které se často používají v klauzulích WHERE.

  • Zvažte indexování klíčů, které se často používají ke spojování tabulek v příkazech SQL. Další informace o optimalizaci spojení naleznete v části „Použití klastrů hash pro výkon“.

  • Vyberte indexové klíče s vysokou selektivitou. Selektivita indexu je procento řádků v tabulce, které mají stejnou hodnotu pro indexovaný klíč. Selektivita indexu je optimální, pokud má několik řádků stejnou hodnotu. Poznámka:Oracle automaticky vytváří indexy nebo používá existující indexy na klíčích a výrazech jedinečných a primárních klíčů, které definujete s omezeními integrity. Indexování sloupců s nízkou selektivitou může být užitečné, pokud je distribuce dat zkreslená, takže se jedna nebo dvě hodnoty vyskytují hodně. méně často než jiné hodnoty.

  • Nepoužívejte standardní indexy B-stromu na klíče nebo výrazy s několika odlišnými hodnotami. Takové klíče nebo výrazy mají obvykle špatnou selektivitu, a proto neoptimalizují výkon, pokud se často vybrané klíčové hodnoty neobjevují méně často než ostatní klíčové hodnoty. V takových případech můžete efektivně používat bitmapové indexy, pokud se index často nemění, jako v aplikaci OLTP s vysokou souběžností.

  • Neindexujte často upravované sloupce. Příkazy UPDATE, které upravují indexované sloupce, a příkazy INSERT a DELETE, které upravují indexované tabulky, trvají déle, než kdyby žádný index neexistoval. Takové příkazy SQL musí upravit data v indexech i data v tabulkách. Také generují další kroky zpět a znovu.

  • Neindexujte klíče, které se objevují pouze v klauzulích WHERE s funkcemi nebo operátory. Klauzule WHERE, která používá jinou funkci než MIN nebo MAX, nebo operátor s indexovaným klíčem nezpřístupňuje přístupovou cestu, která používá index, s výjimkou indexů založených na funkcích.

  • Zvažte indexování cizích klíčů omezení referenční integrity v případech, kdy velký počet souběžných příkazů INSERT, UPDATE a DELETE přistupuje k nadřazeným a podřízeným tabulkám. Takový index umožňuje UPDATES a DELETE v nadřazené tabulce bez zamykání podřízené tabulky sdílením.

  • Při volbě indexování klíče zvažte, zda zvýšení výkonu pro dotazy stojí za ztrátu výkonu pro INSERT, UPDATE a DELETE a za využití prostoru potřebného k uložení indexu. Možná budete chtít experimentovat porovnáním doby zpracování příkazů SQL s indexy a bez nich. Dobu zpracování můžete měřit pomocí nástroje trasování SQL.



  1. Objevte typy na úrovni balíčků PL/SQL pomocí pohledů slovníku Oracle

  2. Návod Jak zálohovat a obnovovat (exportovat a importovat) databáze MySQL

  3. Převést „čas“ na „smalldatetime“ v SQL Server (příklady T-SQL)

  4. Vylepšení Service Broker v SQL Server 2016