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

Index oddílu Oracle

V předchozím článku jsme se dozvěděli o dělené tabulce Oracle. V pokračování této série zde uvedu index oddílu Oracle

Zde jsou některá fakta o porozumění děleným indexům

Indexy místního oddílu

  • Je vytvořen lokální index na dělené tabulce, kde je index rozdělen přesně stejným způsobem jako podkladová dělená tabulka. To znamená, že lokální index zdědí metodu rozdělení tabulky. Toto je známé jako ekvi-rozdělování.
  • U lokálních indexů budou klíče indexu v indexu odkazovat pouze na řádky uložené v jediném základním oddílu tabulky. Lokální index se vytvoří zadáním atributu LOCAL a může být vytvořen jako UNIKÁTNÍ nebo NEJEDINEČNÝ.
  • Tabulka a lokální index jsou buď rozděleny přesně stejným způsobem, nebo mají stejný klíč oddílu, protože místní indexy jsou automaticky udržovány, což může nabídnout vyšší dostupnost.
  • Protože databáze Oracle zajišťuje synchronizaci oddílů indexu s odpovídajícími oddíly tabulky, databáze automaticky udržuje oddíl indexu, kdykoli je provedena jakákoli operace údržby na podkladových tabulkách.
  • například při přidání, zrušení nebo sloučení oddílů.
  • Místní index má předponu, pokud jsou klíč oddílu tabulky a klíč indexu stejné; jinak jde o lokální index bez prefixů
SQL> VYTVOŘENÍ TABULKY EXP_PART (číslo id, číslo_id_položky, název varchar2(20)) PARTICE BY RANGE (id, item_id) (hodnoty oddílu EXP_PART_1 menší než (10, 100), hodnoty oddílu EXP_PART_2 menší než (20, 200), hodnoty oddílu EXP_PART_3 menší než (30, 300), hodnoty oddílu EXP_PART_4 menší než (40, 400) ); Tabulka vytvořena. SQL> CREATE INDEX test_idx ON EXP_PART(id, item_id) LOCAL (partition test_idx_1, partition test_idx_2, partition test_idx_3, partition test_idx_4); Index created.SQL> SELECT index_name, partition_name, status FROM user_ind_partitions where index_name='TEST_IDX' ORDER BY index_name, partition_name; INDEX_NAME STAV PARTITION_NAME --------- ----------- ------ TEST_IDX IX_TEST_IDX_1 POUŽITELNÝ TEST_IDX IX_TEST_IDX_2 POUŽITELNÝ TEST_IDX IX_TEST_IDX_3 POUŽITELNÝ POUŽITÍ TEST_IDX IX_TBLE> 

Globální rozdělené indexy

  • Globální dělený index je index na dělené nebo nerozdělené tabulce, který je dělený nezávisle, tj. pomocí jiného rozdělovacího klíče než tabulka. Globálně dělené indexy mohou být dělené na rozsah nebo hash. Globální dělené indexy se udržují obtížněji než místní indexy. Nabízejí však efektivnější způsob přístupu k jakémukoli jednotlivému záznamu.
  • Během interakce s tabulkou nebo indexem během údržby oddílu budou ovlivněny všechny oddíly v globálním indexu.
  • Pokud na základním oddílu tabulky byly provedeny operace SPLIT, MOVE, DROP nebo TRUNCATE, budou globální indexy i globální rozdělené indexy označeny jako nepoužitelné. Z toho tedy vyplývá, že nezávislost na oddílech není pro globální indexy možná.
  • V závislosti na typu operace provedené na oddílu tabulky budou ovlivněny indexy v tabulce. Při změně oddílu tabulky lze zadat klauzuli UPDATE INDEXES. To automaticky udržuje ovlivněné globální indexy a oddíly.
  • Výhoda použití této možnosti spočívá v tom, že index zůstane online a dostupný po celou dobu operace a po dokončení operace není nutné jej znovu sestavovat.
SQL> VYTVOŘENÍ TABULKY EXP_PART (číslo id, číslo_id_položky, název varchar2(20)) PARTICE BY RANGE (id, item_id) (hodnoty oddílu EXP_PART_1 menší než (10, 100), hodnoty oddílu EXP_PART_2 menší než (20, 200), hodnoty oddílu EXP_PART_3 menší než (30, 300), hodnoty oddílu EXP_PART_4 menší než (40, 400) ); Tabulka vytvořena. SQL> CREATE UNIQUE INDEX EXP_PART_IDX ON EXP_PART(id, item_id) GLOBAL PARTITION BY RANGE (id, item_id) (partition EXP_PART_IDX_1 hodnoty menší než (20, 200), partition EXP_PART_IDX_2 hodnoty menší než (maxvalue, maxvalue)); Index created.SQL> SELECT index_name, partition_name, status FROM user_ind_partitions where index_name='EXP_PART_IDX' ORDER BY index_name, partition_name; INDEX_NAME STAV PARTITION_NAME EXP_PART_IDX EXP_PART_IDX_1 POUŽITELNÝ EXP_PART_IDX EXP_PART_IDX_2 POUŽITELNÝ

Globální nerozdělené indexy

  • Globální nerozdělené indexy nabízejí stejně efektivní přístup k jakémukoli jednotlivému záznamu v libovolném oddílu a chovají se stejně jako nerozdělený index. Vzhledem k tomu, že struktura indexu není rozdělena na oblasti, je index k dispozici všem oblastem.
  • Scénář, kde by byl tento typ indexu užitečný, je dotaz, který nezahrnuje klíč oddílu tabulky jako filtr, ale přesto chcete, aby optimalizátor Oracle používal index

Nejčastější dotazy

Co je index s předponou a bez předpony?

Index se nazývá prefixovaný, pokud jsou úvodní sloupce v definici indexu sloupce klíče oddílu, jinak se nazývá bez prefixů.

Můžeme rozdělit globální index?

Ne, globální index nelze rozdělit na pododdíly, ale můžete jej rozdělit. Jediným způsobem, jak skončit s pododdílem indexu, je mít tabulku s pododdíly s lokálním indexem

Jak zjistit, zda je index globální nebo místní

Dotazem na sloupec LOCALITY v DBA_PART_INDEXES.

Také čte

  • Výukové programy administrace databáze Oracle
  • https://docs.oracle.com/en/database/oracle/oracle-database/18/vldbg/index-partitioning.html#GUID-569F94D0-E6E5-45BB-9626-5506DE18FF00
  • změnit formát data v oracle


  1. Maskování dat v reálném čase pomocí spouštěčů

  2. Funkce SQL velmi pomalá ve srovnání s dotazem bez funkce wrapper

  3. Jak vytvořit blog v PHP a MySQL databázi - DB design

  4. Hibernace je pomalá pro získání připojení Postgres