效能優化案例 執行計畫寧可走全表掃瞄,也不走索引

2021-06-17 00:39:49 字數 963 閱讀 1978

準備資訊:

表:table1,有一列為seq_ord。

索引:在seq_ord列上有乙個normal索引nonuni_index【nonunique】

問題:

測試語句:

select sum(seq_ord) from table1 where seq_ord>100;

第一次執行的時候,發現執行計畫走的是全表掃瞄,並沒有走索引。執行計畫如下圖:

於是,我在語句中新增了/*+index(table1 nonuni_index)*/的提示,讓優化器能夠走索引。執行計畫如下圖:

比較一下,這兩個圖,發現有三個特點:

1、走索引掃瞄的時候,所花費的成本明顯比走全表掃瞄的要多;

2、走索引掃瞄的時候,單是索引的掃瞄成本只有181,不是很高,但是卻在利用rowid掃瞄表資料的時候,耗費了相當多的成本。

分析一下,可能是不是索引的問題。於是,查了一下這個索引的聚簇因子,發現果然很高。

select ind.index_name,ind.clustering_factor,tab.blocks,tab.num_rows from user_indexes ind,user_tables tab where ind.table_name = tab.table_name and tab.table_name = 'table1' and  ind.index_name = 'nonuni_index';

於是,我重建了索引,在執行語句的時候,效能就有了很大的提高。執行計畫,如下圖:

高效能sql優化 執行計畫

一 序言 執行計畫是sql調優必不可少的一部分,如果你還是簡單的認為我們向資料庫發出一條sql語句,資料庫只是根據我們的需求解析sql語句,然後返回我們想要的結果,那你真的是太天真了,因為資料庫還會對每條通過會話發出的sql進行一系列的檢查 分析和處理,然後由優化器選擇生成護著選定出乙個成本最低的執...

Mysql效能優化幾步走

mysql的高負載速度慢一直是運維人員很頭疼的問題,如果你的mysql效能上有問題,或許這篇文章會對你有所幫助。一 硬體優化 1.伺服器的硬體選擇 硬碟 高轉速的比低轉速的要好,2.5寸盤比3.5寸盤更好,磁頭擺動範圍要小於3.5寸盤,硬碟的cache也是需要考量的問題之一。ssd要遠遠優於普通金屬...

Mysql效能優化幾步走

mysql的高負載速度慢一直是運維人員很頭疼的問題,如果你的mysql效能上有問題,或許這篇文章會對你有所幫助。一 硬體優化 1.伺服器的硬體選擇 硬碟 高轉速的比低轉速的要好,2.5寸盤比3.5寸盤更好,磁頭擺動範圍要小於3.5寸盤,硬碟的cache也是需要考量的問題之一。ssd要遠遠優於普通金屬...