Oracle索引小結

2021-07-13 19:29:01 字數 1539 閱讀 8996

索引的三大特點

1,索引樹的高度一般都比較低;

2,索引由索引列儲存的值及rowid組成;

3,索引本身是有序的

索引查詢

--使用者索引字典

select index_name,

blevel,--索引樹所在層數

leaf_blocks,--leaf(葉子塊)的數目

num_rows,

distinct_keys,

clustering_factor

from user_ind_statistics;

select status,t.* from user_indexes t where table_name='table1'
sql>  analyze index xtm12_p validate structure;

index analyzed

sql> select height,del_lf_rows/lf_rows from index_stats;

height del_lf_rows/lf_rows

---------- -------------------

2 0

--當 查詢出來的 height>=4 或者 del_lf_rows/lf_rows>0.2 的場合 , 該索引考慮重建

sql>alter index indexname rebuild;

sql>alter index indexname rebuild online; --聯機索引重建 ,所有使用者都不會用到索引時重建

1、條件字段選擇性弱,查出的結果集較大,不走索引;

強制索引:/*+index(表名,索引名字)*/ 的方法,但是這種方法有個缺點,如果索引的名字改變了,就會導致程式重新改動,大大增加維護成本。  索引提示還可以使用列的方法進行,語法是/*+index(表名,(索引列的列表))*/,這種方法即使索引的名字變了,也不會導致程式重新改動

2、where條件等號兩邊字段型別不同,不走索引;

3、優化器分析的統計資訊陳舊也可能導致不走索引;

execute dbms_stats.gather_table_stats($user_name,$table_name);

4、索引字段 is null 不走索引;

5、對於count(*)當索引欄位有not null約束時走索引,否則不走索引;

6、like 後面的字元當首位為萬用字元時不走索引;

7、使用不等於操作符如:<>、!= 等不走索引;

8、索引欄位前加了函式或參加了運算不走索引;

9、索引字段之間用 or ;

or 轉為union all

cbo比較「傻」,它計算出來哪個執行計畫的cost小就會預設用哪個。cost在計算過程中會取近似值,這會導致有時cbo選擇的錯誤的執行計畫。同時有時表的資訊沒有收集正確也會導致實際計算的cost有偏差選擇錯誤的執行計畫。最後,如果oracle認為走索引不能正確實現sql的目的,這是就是用hint也是不會選擇索引的。

oracle學習小結3之索引

今天歸納索引的常用操作 1 索引分為b樹索引和點陣圖索引 建立create index scott.event index on scott.event name pctfree 25 storage initial 500k tablespace system 如果是點陣圖索引,則create b...

oracle學習小結3之索引

今天歸納索引的常用操作 1 索引分為b樹索引和點陣圖索引 建立 create index scott.event index on scott.event name pctfree 25 storage initial 500k tablespace system 如果是點陣圖索引,則create ...

索引簡要小結

索引是一種特殊的檔案 innodb資料表上的索引是表空間的乙個組成部分 它們包含著對資料表裡所有記錄的引用指標。索引是一種單獨的 物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。資料庫索引好比是一本書前面的...