-- Az indexekkel kapcsolatos speciális lehetőségeket lásd az ab2_oracle.docx állományban. -- (pl. COMPRESS, REVERSE, FUNCTION-BASED, BITMAP, INDEX ORAGANIZED) -- Információk az indexekről a katalógusban (adatszótár nézetekben): -- DBA_INDEXES -- DBA_IND_COLUMNS (indexbeli oszlopok) -- DBA_IND_EXPRESSIONS (függvény alapú index kifejezései) -- Index szervezett tábla index része: DBA_INDEXES -> index_type és table_name oszlopok -- Index szervezett tábla tábla része: -- DBA_TABLES -> iot_name és iot_type oszlopok drop index emp1; drop index emp2; drop index emp3; drop index emp4; drop index emp5; drop index emp6; drop table cikk_iot; drop table cikk_iot2; -- előtte: CREATE TABLE emp AS SELECT * FROM nikovits.emp; CREATE UNIQUE INDEX emp1 ON emp (ename); CREATE INDEX emp2 ON emp (job, sal DESC); CREATE INDEX emp3 ON emp (job, sal) REVERSE; CREATE INDEX emp4 ON emp (deptno, job, sal) COMPRESS 2; CREATE BITMAP INDEX emp5 ON emp (mgr); CREATE INDEX emp6 ON emp (SUBSTR(ename, 2, 2), job); -- Index szervezett tábla (Index Organized Table) CREATE TABLE cikk_iot ( ckod integer, cnev varchar2(20), szin varchar2(15), suly float, CONSTRAINT cikk_iot_pk PRIMARY KEY (ckod) ) ORGANIZATION INDEX PCTTHRESHOLD 20 INCLUDING cnev OVERFLOW TABLESPACE users; INSERT INTO cikk_iot SELECT * FROM nikovits.cikk; COMMIT; -- További index létrehozása az index szervezett táblára CREATE INDEX CIKK_IOT_SZIN on cikk_iot(szin); -- Egy másik index szervezett tábla túlcsordulási rész nélkül CREATE TABLE cikk_iot2 ( ckod integer, cnev varchar2(20), szin varchar2(15), suly float, CONSTRAINT cikk_iot2_pk PRIMARY KEY (ckod) ) ORGANIZATION INDEX; INSERT INTO cikk_iot2 SELECT * FROM nikovits.cikk; COMMIT; /******** A fenti indexekre vonatkozó információk az adatszótár nézetekben: -------------------------------------------------------------------- SELECT table_name, index_name, index_type, uniqueness, compression, prefix_length FROM dba_indexes WHERE table_owner='NIKOVITS' AND table_name='EMP'; tab ind index_type unique compress prefix ------------------------------------------------------------------ EMP EMP1 NORMAL UNIQUE DISABLED null EMP EMP2 FUNCTION-BASED NORMAL NONUNIQUE DISABLED null EMP EMP3 NORMAL/REV NONUNIQUE DISABLED null EMP EMP4 NORMAL NONUNIQUE ENABLED 2 EMP EMP5 BITMAP NONUNIQUE DISABLED null EMP EMP6 FUNCTION-BASED NORMAL NONUNIQUE DISABLED null A fenti eredményből látható, hogy a csökkenő sorrendű oszlopot (EMP2 indexben) is úgy tekinti a rendszer, mintha függvény alapú index volna. Valószínűleg úgy van implementálva, hogy (-1)-el megszorozza a kulcsértékeket és ezeket tárolja a levél szinten. SELECT index_name, column_name, column_position, descend FROM dba_ind_columns WHERE table_owner='NIKOVITS' AND table_name='EMP'; ind col pos desc ----------------------------- EMP1 ENAME 1 ASC EMP2 JOB 1 ASC EMP2 SYS_NC00009$ 2 DESC EMP3 JOB 1 ASC EMP3 SAL 2 ASC EMP4 DEPTNO 1 ASC EMP4 JOB 2 ASC EMP4 SAL 3 ASC EMP5 MGR 1 ASC EMP6 SYS_NC00010$ 1 ASC EMP6 JOB 2 ASC SELECT index_name, column_position, column_expression FROM dba_ind_expressions WHERE table_owner='NIKOVITS' AND table_name='EMP'; ind pos expr ---------------------- EMP2 2 "SAL" EMP6 1 SUBSTR("ENAME",2,2) Az index-szervezett táblára vonatkozó információk: SELECT table_name, index_name, index_type FROM dba_indexes WHERE owner='NIKOVITS' AND table_name='CIKK_IOT'; t_name i_name index_type ----------------------------------------- CIKK_IOT CIKK_IOT_PK IOT - TOP CIKK_IOT CIKK_IOT_SZIN NORMAL ... SELECT table_name, iot_name, iot_type FROM dba_tables WHERE owner='NIKOVITS' AND (table_name LIKE 'CIKK_IOT%' OR iot_name LIKE 'CIKK_IOT%'); table_name iot_name iot_type ----------------------------------------------- SYS_IOT_OVER_152024 CIKK_IOT IOT_OVERFLOW CIKK_IOT null IOT ... SELECT object_name, object_type, object_id, data_object_id FROM dba_objects WHERE owner='NIKOVITS' AND (object_name LIKE 'SYS_IOT%' OR object_name LIKE 'CIKK_IOT%'); object_name object_type object_id data_object_id ---------------------------------------------------------- SYS_IOT_OVER_152024 TABLE 100672 100672 CIKK_IOT_PK INDEX 100673 100673 CIKK_IOT TABLE 100671 NULL ... SELECT segment_name, segment_type, bytes FROM dba_segments WHERE owner='NIKOVITS' AND (segment_name LIKE 'SYS_IOT%' OR segment_name LIKE 'CIKK_IOT%'); segment_name segment_type bytes --------------------------------------- SYS_IOT_OVER_152024 TABLE 65536 CIKK_IOT_PK INDEX 65536 ... *********/