SQL優化之建立索引五

2021-08-30 00:08:23 字數 1040 閱讀 5070

第十四掌 使用基於函式的索引

前面談到任何對列的操作都可能導致全表掃瞄,例如:

select * from emp where substr(ename,1,2)=』sm』;

但是這種查詢在客服系統又經常使用,我們可以建立乙個帶有substr函式的基於函式的索引,

create index emp_ename_substr on eemp ( substr(ename,1,2) );

這樣在執行上面的查詢語句時,這個基於函式的索引將排上用場,執行計畫將是(index range scan)。

第十五掌 基於函式的索引要求等式匹配

上面的例子中,我們建立了基於函式的索引,但是如果執行下面的查詢:

select * from emp where substr(ename,1,1)=』s』

得 到的執行計畫將還是(table access full),因為只有當資料列能夠等式匹配時,基於函式的索引才能生效,這樣對於這種索引的計畫和維護的要求都很高。請注意,向表中新增索引是非常危險的 操作,因為這將導致許多查詢執行計畫的變更。然而,如果我們使用基於函式的索引就不會產生這樣的問題,因為oracle只有在查詢使用了匹配的內建函式時 才會使用這種型別的索引。

第十六掌 使用分割槽索引

在用分析命令對分割槽索引進行分析時,每乙個分割槽的資料值的範圍資訊會放入oracle的資料字典中。oracle可以利用這個資訊來提取出那些只與sql查詢相關的資料分割槽。

例如,假設你已經定義了乙個分割槽索引,並且某個sql語句需要在乙個索引分割槽中進行一次索引掃瞄。oracle會僅僅訪問這個索引分割槽,而且會在這個分割槽上呼叫乙個此索引範圍的快速全掃瞄。因為不需要訪問整個索引,所以提高了查詢的速度。

第十七掌 使用位圖索引

位圖索引可以從本質上提高使用了小於1000個唯一資料值的資料列的查詢速度,因為在位圖索引中進行的檢索是在ram中完成的,而且也總是比傳統的b樹索引的速度要快。對於那些少於1000個唯一資料值的資料列建立位圖索引,可以使執行效率更快。

SQL優化之建立索引一

基於索引的sql語句優化之降龍十八掌 塵封往事 引用功能被關閉了。前言 客 服業務受到sql語句的影響非常大,在規模比較大的局點,往往因為乙個小的sql語句不夠優化,導致資料庫效能急劇下降,小型機idle所剩無幾,應用服 務器斷連 超時,嚴重影響業務的正常執行。因此,稱低效的sql語句為客服業務的 ...

SQL優化之建立索引二

降龍十八掌 第一掌 避免對列的操作 任何對列的操作都可能導致全表掃瞄,這裡所謂的操作包括資料庫函式 計算表示式等等,查詢時要盡可能將操作移至等式的右邊,甚至去掉函式。例1 下列sql條件語句中的列都建有恰當的索引,但30萬行資料情況下執行速度卻非常慢 select from record where...

SQL優化之建立索引六

第十八掌 決定使用全表掃瞄還是使用索引 和 所有的秘笈一樣,最後一招都會又回到起點,最後我們來討論一下是否需要建立索引,也許進行全表掃瞄更快。在大多數情況下,全表掃瞄可能會導致更多的物理磁 盤輸入輸出,但是全表掃瞄有時又可能會因為高度並行化的存在而執行的更快。如果查詢的表完全沒有順序,那麼乙個要返回...