programmera.net -> oracle -> normal för utskrift | info@programmera.net |
Index i Oracle
1. Index 2. CREATE INDEX 3. UNIQUE 4. BITMAP 5. Multipelindex 6. Funktionsbaserat index 7. ALTER INDEX 8. DROP INDEX |
1. Index
Index används till att öka prestandan på framför allt SELECT-satser. Det finns två typer av index i Oracle:
2. CREATE INDEX
Syntaxen för att skapa ett index är följande:
Om man specifierar fler än en kolumn får man ett multipelindex. Nyckelorden kan förklaras på följande sätt:
CREATE [UNIQUE | BITMAP] INDEX indexnamn
ON tabell(
{kolumn | funktionsutr.} [ASC | DESC]
[,{kolumn | funktionsutr.} [ASC | DESC]]
)
[ONLINE]
[[NO]COMPRESS [nr]]
[NOSORT | REVERSE]
[[NO]PARALLEL [nr]]
3. UNIQUE
Vi testar att skapa ett unikt index på kolumnen ID_NR som ändå ska vara unik:
Detta gick bra för att vi bara har unika värden i kolumnen ID_NR.
SQL> CREATE UNIQUE INDEX idx_emp_id_nr
ON emp(id_nr);
Index är skapat.
4. BITMAP
Eftersom antalet avdelningar i DEP-tabellen är relativt få skapar vi ett bitmappat index för kolumen DEP_PK:
SQL> CREATE BITMAP INDEX bmp_emp_dep_pk
ON emp(dep_pk);
Index är skapat.
5. Multipelindex
Ett multipelindex är bra att skapa om man vill öka prestandan på SELECT-satser som baserar sig på flera kolumner. Jag råkar veta att sökningar på för- och efternamn är vanliga i just min applikation, därför vill jag skapa ett multipelindex på för- och efternamn. Det är viktigt i vilken ordning man specifierar de olika kolumnerna:
SQL> CREATE INDEX idx_emp_first_last_name
ON emp(first_name, last_name);
Index är skapat.
6. Funktionsbaserat index
Ett funktionsbaserat index skapas genom att man placerar en kolumn i ett uttryck, se exempel:
För att användaren ska kunna skapa funktionsbaserade index krävs att hon har rättigheten QUERY_REWRITE.
SQL> CREATE INDEX idx_func_emp_tax ON olle.emp( 0.3 * salary);
Index är skapat;
7. ALTER INDEX
Med ALTER INDEX kan man förändra ett index egenskaper:
Nyckelorden har samma innebörd som vid CREATE INDEX med tillägget:
ALTER INDEX indexnamn
RENAME TO indexnamn2
| [ENABLE | DISABLE]
| [NO]PARALLEL [nr]
| REBUILD{
[[NO]REVERSE]
[ONLINE]
[[NO]COMPRESS [nr]]
[[NO]PARALLEL [nr]]
}
;
Vi testar att byta namn på ett index:
Vi testar att bygga om ett index till REVERSE:
SQL> ALTER INDEX bmp_emp_dep_pk RENAME TO idx_bmp_emp_dep_pk;
Index är ändrat.
SQL> ALTER INDEX idx_emp_id_nr REBUILD REVERSE;
Index är ändrat.
8. DROP INDEX
Ett index kan kastas med DROP INDEX:
Till exempel:
DROP INDEX indexnamn;
SQL> DROP INDEX idx_emp_first_last_name;
Index är borttaget.