Oracle
 sql >> база данни >  >> RDS >> Oracle

Добра практика за използване на обратни индекси на сурогатни ключове? (Оракул)

Като цяло, ако не използвате RAC, няма причина да използвате индекс с обратен ключ.

От гледна точка на производителността е много по-добре да имате един или два горещи блока във всеки даден момент, които са обект на вмъквания, защото това по същество гарантира, че горещите блокове ще бъдат в буферния кеш и INSERT няма да трябва да поема разходите за четене на блока от диск. Ако имате вмъквания, влизащи в произволни блокове в индекс, има много по-голяма вероятност блокът, който искате, да е остарял от кеша и да понесе разходите за физически I/O.

Разходите за поддържане на балансиран индекс са доста минимални, но дори това е в полза на стандартен индекс. Ако имате последователност, генерирана първичен ключ с нормален индекс, Oracle ще направи 90/10 блоково разделяне в най-десния блок, когато този блок се запълни. За разлика от това, ако имате обратен ключов индекс, Oracle трябва да направи разделяне на блокове 50/50 всеки път, когато даден блок се запълни. Разделяне на блокове 50/50 копира половината данни от стария блок в новия блок, разделяне на блокове 90/10 копира само най-дясната стойност на данните в новия блок. Следователно разделянето на блокове 90/10 е много по-евтино от разделянето на блокове 50/50 и ще трябва да направите приблизително еднакъв брой разделяния на блокове, независимо от типа индекс, който изберете. Така че разходите за поддържане на редовен индекс са по-малки от разходите за поддържане на обратен ключов индекс, дори игнорирайки ефекта на кеша.

Причината, поради която бихте обмислили използването на обратен ключов индекс, е, че използвате RAC и искате да избегнете разходите за много RAC възли, които се бият за един и същ горещ блок. Ако постоянно трябва да изпращате горещия блок от един възел на друг, за да направите следващото вмъкване, може да си струва вместо това да използвате обратен ключов индекс, за да намалите това съревнование. Ако сте лицензирали опцията за разделяне, би било все пак по-добре да използвате хеш разделен индекс вместо това (това може да се направи независимо дали таблиците са разделени или не). Ако не сте лицензирали опцията за разделяне, индексът на обратен ключ може да е достатъчно добър за разрешаване на спорове в горещия блок, за да не изисква да лицензирате разделянето.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OracleCommand с OracleDependency чака вечно

  2. Как да вмъкна дата преди новата ера в Oracle?

  3. Ключовата дума FROM не е намерена, където се очаква

  4. Как да получите записи на случаен принцип от базата данни на Oracle?

  5. Oracle10g SQL опорна точка