發現 Oracle 有索引卻走 Full Table Scan(FTS),**不代表優化器出錯**。兩種常見情況 FTS 更快:
SELECT COUNT(*) FROM mytable;
優化器評估 Index Access Path 代價的核心公式:
Cost ≈ FF × (CF + 索引區塊數)
兩大關鍵指標:
ALTER INDEX REBUILD。表 mytables 32萬列,PK myid 範圍 1~409654
-- SQL 1:FF ≈ 100% SELECT * FROM mytables WHERE myid >= 1; -- Execution Plan: TABLE ACCESS FULL, Cost=3132, 41473 consistent gets -- SQL 2:FF ≈ 1% SELECT * FROM mytables WHERE myid >= 400000; -- Execution Plan: INDEX RANGE SCAN (PK_MYTABLES), Cost=346, 6647 consistent gets
FF 差異導致存取路徑截然不同。**寫 SQL 前估估 FF,幾乎能預判是否走索引**。
ALTER INDEX REBUILD 或 COALESCETRUNCATE TABLE 同時清除表與索引碎片DBMS_STATS、自動任務、採樣率、直方圖)DBA_INDEXES.CLUSTERING_FACTOR,CF 惡化觸發重建索引不是銀彈,而是需要精準統計資訊、理解 CF/FF 機制、持續維護碎片的精密儀器。掌握這三大核心,才能真正駕馭 Oracle 索引效能。