《資料庫索引設計優化》讀書筆記(七)

2021-07-09 20:32:34 字數 3150 閱讀 5741

第13章 資料庫索引選項

練習

13.1 調查你當前使用的dbms版本關於索引的限制和高階選項。

.索引行壓縮與異常情況

mysql支援

oracle支援

mysql使用null值實現索引行壓縮。但不推薦在實際中使用null來代替乙個特定的值,因為從長遠來看,這可能會導致應用系統錯誤。

表中有三個null值,但唯一索引建立成功。從圖1可以看到,查詢null值的記錄使用了idx的索引覆蓋,但type型別卻是ref,表示索引的資料值是非唯一的。從extra列的using where可以看到需要過濾元組,可見多行null值被壓縮成乙個唯一鍵值。

.索引鍵以外的其他索引列

mysql不支援

oracle不支援

.唯一性約束

mysql不支援

oracle支援

create table t1(a int,b varchar2(20));

create index idx1 on t1(a,b);

alter table t1 add primary key (a);

select index_name,uniqueness from user_indexes;

查詢結果如圖2所示

select constraint_name,constraint_type from user_constraints;
查詢結果如圖3所示

從圖2可以看到,表t1上只有乙個非唯一索引idx1。從圖3可以看到,表t1上有乙個主鍵約束。索引idx1可以被用來約束主鍵a的唯一性。這可以通過引入primary key約束來做到。

再來看mysql

create table t1(a int,b varchar(20));

create index idx1 on t1(a,b);

alter table t1 add primary key (a);

show index from t1;

查詢結果如圖4所示

mysql在主鍵上新建了乙個名為primary的索引,而沒有使用已有的idx1索引加主鍵約束的方式。

.從兩個方向掃瞄索引

mysql支援

oracle支援

create table t1 as select * from dba_objects;

create index idx1 on t1(owner,object_id);

exec dbms_stats.gather_table_stats(ownname=>'wxy',tabname => 't1',estimate_percent=> 20 , cascade=> true );

set autotrace traceonly;

select * from t1 where owner='sys' and object_id > 50000 order by object_id desc;

查詢結果如圖5所示,進行了索引範圍逆向掃瞄。

再來看mysql

create table t1 as select * from information_schema.tables;

create index idx1 on t1(table_schema,table_name);

explain select * from t1 where table_schema='test' order by table_name desc;

explain select * from t1 where table_schema='test' order by table_name;

查詢結果如圖6所示,無論是正向還是反向order by,都是使用的索引掃瞄,沒有額外的排序。

.索引鍵截斷

mysql不支援

oracle不支援

.基於函式的索引

mysql不支援

oracle支援

.索引跳躍式掃瞄

mysql支援(loose index scan)乙個例子

oracle支援(index skip scan)

.塊索引

mysql不支援

oracle支援(cluster index)

.資料分割槽的二級索引

mysql分割槽表只支援本地索引。

oracle分割槽表支援本地索引(local)和全域性索引(global)。

《資料庫索引設計優化》讀書筆記(一)

第3章 sql處理過程 練習 3.1 為sql3.7中所示的查詢設計盡可能好的索引 sql 3.7 select lname,fname,cno from cust where m and height 190 order by lname,fname 分析 本書第4章提出了乙個三星索引的概念。如果...

《資料庫索引設計優化》讀書筆記(二)

第4章 為select語句建立理想的索引 練習 4.1 為sql4.5中的查詢語句設計候選索引a和選索引b。sql 4.5 select a,b,d,e from orderitem where b between b1 and b2 ff 1.10 and c 1 ff 2 and e 0 ff ...

《資料庫索引設計優化》讀書筆記(四)

第7章 被動式索引設計 練習 7.1 你將如何歸類圖7.12中的尖刺 有優化空間的問題製造者,無優化空間的問題製造者,還是受害者?分析 如圖7.2所示,我們首先要區分的是問題的製造者及受害者。長服務時間為問題製造者,長排隊時間為受害者。如果乙個事務獨佔了資源 也許是因為使用了不合適的索引 那麼就會對...