一、創建索引對執行計劃的影響
在SQL開始執行之前,Oracle會確定SQL語句的執行計劃,並按照執行計劃的步驟訪問相應的表和索引。
一旦執行計劃確定下來,Oracle會按照這個執行計劃完成SQL語句的執行,在SQL語句執行開始之後建立的索引不會改變SQL語句的執行計劃。
因此,創建索引不會對執行計劃有任何的影響,也就不會對運行中的SQL語句有影響。下面通過一個例子簡單驗證一下:
SQL> CREATE TABLE TEST (ID NUMBER, FID NUMBER, NAME VARCHAR2(30), BID_COLUMNS CHAR(2000));
Table created.
SQL> INSERT INTO TEST VALUES (1, 0, 'OBJECT', '0');
1 row created.
SQL> INSERT INTO TEST VALUES (2, 1, 'TABLE', '0');
1 row created.
SQL> INSERT INTO TEST VALUES (3, 1, 'INDEX', '0');
1 row created.
SQL> INSERT INTO TEST VALUES (4, 1, 'VIEW', '0');
1 row created.
SQL> INSERT INTO TEST VALUES (5, 1, 'SYNONYM', '0');
1 row created.
SQL> INSERT INTO TEST VALUES (6, 1, 'SOURCE', '0');
1 row created.
SQL> INSERT INTO TEST SELECT 20000+ROWNUM, 2, TABLE_NAME, '0' FROM DBA_TABLES;
874 rows created.
SQL> INSERT INTO TEST SELECT 30000+ROWNUM, 3, INDEX_NAME, '0' FROM DBA_INDEXES;
1074 rows created.
SQL> INSERT INTO TEST SELECT 40000+ROWNUM, 4, VIEW_NAME, '0' FROM DBA_VIEWS;
2929 rows created.
SQL> INSERT INTO TEST SELECT 50000+ROWNUM, 5, TABLE_NAME,