Документацията на 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 проследяване.