Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Einzelner mehrspaltiger Index oder zwei einzelne Spaltenindizes

Es kommt darauf an...

Es ist ziemlich unwahrscheinlich, dass ein Index nur auf column1 ist von Vorteil, wenn Sie bereits einen zusammengesetzten Index für column1, column2 haben . Seit column1 der führende Index ist, fragt die Tabelle ab, die nur column1 hat als Prädikat wird der zusammengesetzte Index verwendet werden können. Wenn Sie häufig Abfragen ausführen, die einen vollständigen Scan des Index und das Vorhandensein von column2 durchführen müssen die Größe des Index erheblich erhöht, ist es möglich, dass ein Index nur auf column1 wäre effizienter, da der vollständige Index-Scan weniger E/A-Vorgänge ausführen müsste. Aber das ist eine ziemlich ungewöhnliche Situation.

Ein Index nur für column2 kann von Vorteil sein, wenn einige Ihrer Abfragen für die Tabelle Prädikate nur für column2 angeben . Wenn es relativ wenige eindeutige Werte von column1 gibt , ist es möglich, dass Oracle einen Index-Skip-Scan mit dem zusammengesetzten Index durchführt, um Abfragen zu erfüllen, die nur column2 angeben als Prädikat. Aber ein Skip-Scan ist wahrscheinlich viel weniger effizient als ein Range-Scan, daher ist es ziemlich wahrscheinlich, dass ein Index nur auf column2 liegt würde diesen Abfragen zugute kommen. Wenn es eine große Anzahl unterschiedlicher Werte für column1 gibt , wäre der Skip-Scan noch weniger effizient und ein Index nur auf column2 wäre vorteilhafter. Natürlich, wenn Sie die Tabelle niemals mit column2 abfragen ohne auch ein Prädikat für column1 anzugeben , benötigen Sie keinen Index nur für column2 .