【DB筆試面試640】在Oracle中,基表COL_USAGE$的作用是什麼?
- 2019 年 10 月 10 日
- 筆記
題目部分
在Oracle中,基表COL_USAGE$的作用是什麼?
♣
答案部分
從Oracle 9i開始引入了SYS.COL_USAGE$表用來跟蹤列的使用情況,該功能通過隱含參數「_COLUMN_TRACKING_LEVEL」來控制。若隱含參數「_COLUMN_TRACKING_LEVEL」的值為0則取消該功能,若隱含參數「_COLUMN_TRACKING_LEVEL」的值為1則表示該功能生效。缺省情況下,該功能是生效的,並且CBO負責將SQL語句中WHERE條件的查詢謂詞信息保存在該表中,數據庫在執行SHUTDOWN NORMAL或者SHUTDOWN IMMEDIATE會自動將該表中的數據清空。
下邊的SQL可以查詢出表上列的使用情況:
CREATE OR REPLACE VIEW VW_COLUMN_USAGE_LHR AS SELECT OO.NAME OWNER, O.NAME TABLE_NAME, C.NAME COLUMN_NAME, U.EQUALITY_PREDS, U.EQUIJOIN_PREDS, U.NONEQUIJOIN_PREDS, U.RANGE_PREDS, U.LIKE_PREDS, U.NULL_PREDS, U.TIMESTAMP FROM SYS.COL_USAGE$ U, SYS.OBJ$ O, SYS.USER$ OO, SYS.COL$ C WHERE O.OBJ# = U.OBJ# AND OO.USER# = O.OWNER# AND C.OBJ# = U.OBJ# AND C.COL# = U.INTCOL# ;
可以通過執行存儲過程「EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;」或收集直方圖的方式「EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'LHR',TABNAME => 'T1');」來將內存中的統計數據刷新到SYS.COL_USAGE$表中。
本文選自《Oracle程序員面試筆試寶典》,作者:小麥苗