Det beror på...
Det är ganska osannolikt att ett index på bara column1
kommer att vara fördelaktigt om du redan har ett sammansatt index på column1, column2
. Sedan column1
är det ledande indexet, frågor mot tabellen som bara har column1
som ett predikat kommer att kunna använda det sammansatta indexet. Om du ofta kör frågor som behöver göra en fullständig genomsökning av indexet och förekomsten av column2
avsevärt ökar storleken på indexet, är det möjligt att ett index på bara column1
skulle vara effektivare eftersom fullindexskanningen skulle behöva göra mindre I/O. Men det är en ganska ovanlig situation.
Ett index på bara column2
kan vara fördelaktigt om några av dina frågor mot tabellen anger predikat på bara column2
. Om det finns relativt få distinkta värden för column1
, är det möjligt att Oracle kunde göra en indexöverhoppningsskanning med det sammansatta indexet för att tillfredsställa frågor som endast anger column2
som ett predikat. Men en hoppa över sökning är sannolikt mycket mindre effektiv än en intervallsökning, så det är rimligt troligt att ett index på bara column2
skulle gynna dessa frågor. Om det finns ett stort antal distinkta värden för column1
, skulle hoppa över skanningen vara ännu mindre effektiv och ett index på bara column2
skulle vara mer fördelaktigt. Naturligtvis, om du aldrig frågar tabellen med column2
utan att även ange ett predikat på column1
, du skulle inte behöva ett index på bara column2
.