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

Oracle 11G - Výkonnostní efekt indexování při vkládání

Je pravda, že je rychlejší upravit tabulku, pokud také nemusíte upravovat jeden nebo více indexů a případně provádět také kontrolu omezení, ale je také do značné míry irelevantní, pokud musíte tyto indexy přidat. Musíte vzít v úvahu kompletní změnu systému, kterou chcete provést, nikoli pouze jeho jednu část.

Je zřejmé, že pokud přidáváte jeden řádek do tabulky, která již obsahuje miliony řádků, bylo by pošetilé vypouštět a znovu vytvářet indexy.

I když však máte úplně prázdnou tabulku, do které se chystáte přidat několik milionů řádků, může být stále pomalejší odložit indexování na později.

Důvodem je, že takové vložení se nejlépe provádí pomocí mechanismu přímé cesty, a když použijete přímé vložení cesty do tabulky s indexy, vytvoří se dočasné segmenty, které obsahují data potřebná k sestavení indexů (data plus rowids ). Pokud jsou tyto dočasné segmenty mnohem menší než tabulka, kterou jste právě načetli, bude také rychlejší je skenovat a z nich sestavovat indexy.

alternativou, pokud máte v tabulce pět indexů, je provést pět úplných prohledání tabulky poté, co jste ji načetli, abyste vytvořili indexy.

Je zřejmé, že se zde jedná o velké šedé oblasti, ale dobře pro:

  1. Zpochybňování autority a obecných pravidel a
  2. Provedení skutečných testů za účelem zjištění faktů ve vašem vlastním případě.

Upravit:

Další úvahy -- spustíte zálohu, zatímco jsou indexy zrušeny. Nyní, po nouzovém obnovení, musíte mít skript, který ověří, že všechny indexy jsou na svém místě, když vám podnikání dýchá za krk, aby se systém znovu zprovoznil.

Také, pokud jste byli absolutně rozhodnuti neudržovat indexy během hromadného načítání, nepouštějte indexy – místo toho je deaktivujte. To zachová metadata pro existenci a definici indexů a umožňuje jednodušší proces přestavby. Dejte si jen pozor, abyste omylem znovu nepovolili indexy oříznutím tabulky, protože tím se deaktivované indexy znovu povolí.



  1. Jak zajistit, aby se mysql dotaz neustále obnovoval v PHP?

  2. Zabezpečení v systému API | PHP cuRL

  3. Konverze příkazu merge do MYSQL pomocí duplicitního klíče

  4. Třída JPA Entity dává chybu se 2 poli @GeneratedValue