準備資訊:
表: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要遠遠優於普通金屬...