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

Как да изберем и оптимизираме индекси на Oracle?

Документацията на Oracle има отличен набор от съображения за избор на индексиране:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

Актуализация за 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D

Цитирам:

  • Помислете за индексиране на ключове, които се използват често в клаузите WHERE.

  • Помислете за ключове за индексиране, които се използват често за свързване на таблици в SQL изрази. За повече информация относно оптимизирането на съединения вижте раздела „Използване на хеш клъстери за производителност“.

  • Изберете индексни клавиши с висока селективност. Селективността на индекса е процентът на редовете в таблица с еднаква стойност за индексирания ключ. Селективността на индекса е оптимална, ако няколко реда имат една и съща стойност. Забележка:Oracle автоматично създава индекси или използва съществуващи индекси за ключовете и изразите на уникални и първични ключове, които дефинирате с ограничения на целостта. Индексирането на колони с ниска селективност може да бъде полезно, ако разпределението на данните е изкривено, така че една или две стойности се появяват много по-рядко от други стойности.

  • Не използвайте стандартни индекси на B-дърво за ключове или изрази с малко различни стойности. Такива ключове или изрази обикновено имат слаба селективност и следователно не оптимизират производителността, освен ако често избираните ключови стойности се появяват по-рядко от другите ключови стойности. Можете да използвате ефективно индексите на растерни изображения в такива случаи, освен ако индексът не се променя често, както в OLTP приложение с висок паралел.

  • Не индексирайте колони, които се променят често. Инструкциите UPDATE, които променят индексирани колони и операторите INSERT и DELETE, които променят индексирани таблици, отнемат повече време, отколкото ако няма индекс. Такива SQL изрази трябва да променят данни в индекси, както и данни в таблици. Те също така генерират допълнителни отмяна и повторение.

  • Не индексирайте ключове, които се появяват само в клаузите WHERE с функции или оператори. Клауза WHERE, която използва функция, различна от MIN или MAX, или оператор с индексиран ключ, не прави достъпен пътя за достъп, който използва индекса, освен с индекси, базирани на функции.

  • Помислете за индексиране на външни ключове на ограничения за референтна цялост в случаите, в които голям брой едновременни оператори INSERT, UPDATE и DELETE имат достъп до родителската и дъщерната таблици. Такъв индекс позволява UPDATE и DELETE на родителската таблица без споделяне да заключва дъщерната таблица.

  • Когато избирате да индексирате ключ, помислете дали повишаването на производителността за заявки си струва загубата на производителност за INSERT, UPDATE и DELETE и използването на пространството, необходимо за съхраняване на индекса. Може да искате да експериментирате, като сравните времето за обработка на SQL изразите със и без индекси. Можете да измервате времето за обработка със средството за SQL проследяване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избера всички колони от таблица, плюс допълнителни колони като ROWNUM?

  2. Ако изявление в рамките на клауза Къде

  3. Защо моето песимистично заключване в JPA с Oracle не работи

  4. Как да намерите компонентите на EBS R12 Версия

  5. .NET / Oracle:Как да изпълним скрипт с DDL изрази програмно