最佳化絕不僅僅只是索引,最佳化索引

來源:互聯網
上載者:User

最佳化絕不僅僅只是索引,最佳化索引

一畢業就接觸最佳化方面的問題,專業做最佳化也有至少5年之多的時間了,可現在還是經常聽到很多人認為最佳化很簡單,就是建索引的問題,這確實不能怪大家,做這行20多年的時間裡,在職業生涯的每個階段,幾乎都能聽到這樣的聲音,在很多書上也看到過這樣的說法,但這裡我想告訴大家:最佳化絕不只是建索引,最佳化也不是很簡單的事兒,這項工作需要全面的資料庫基礎知識,深刻的概念理解,還要有豐富的實踐經驗。

資料庫的最佳化,大體可以分為OS、DB和SQL層面的最佳化。先拋開OS和DB層面不說,我們就先說SQL語句的最佳化(SQL TUNING),說到SQL的最佳化,就讓我們不得不提到執行計畫(explain plan),所有的關係型資料庫(oracle,db2,sqlserver,mysql,postgresql,gp等),針對SQL語句,都有相應的執行計畫,只是表現形式不同而已。執行計畫裡包括了多個節點或步驟,根據SQL複雜度的不同,節點或多或少,這些節點裡,有多種資料的存取方法,也有多種節點之間資料的計算方法,而索引,只是多種資料存取方法裡的一種而已,再拋開那些計算節點和其他資料訪問節點,僅僅索引訪問資料的方法,又分為很多種,大家可以看看,拋開了這麼多方面和內容,僅僅索引還有這麼多內容學習和研究。

說到了訪問資料的方法,最常見的就是全表掃描和索引訪問了,現在很多人,甚至很多IT人一見到全表掃描就認為執行計畫出現了問題,甚至大聲驚呼,好像發現了新大陸,其實,全表掃描有自己的適用情境,而索引訪問也有自己的適用情境,並不是任何時候通過索引訪問資料才是最優的,最淺顯的,訪問表裡的大部分資料,全表掃描就可能比索引訪問要好些,還有一點,就是索引的cluster factor,當這個值很高的時候(也許很多朋友注意到,有時一個SQL的邏輯讀比整張表都大很多,僅此而已),即使你訪問的資料比例不大,也可能走全表掃描,而在多個不同欄位上建的索引存在的情況下,cluster factor的問題幾乎是不可避免的,所以,要想真正的掌握最佳化,我們必須知道並深入理解資料庫涉及的基礎知識和概念,只有這樣,我們才能搞清楚,什麼情況下,什麼樣的存取方法和演算法是最合適的。

SQL TUNING確實對職業人員的要求較高,但這隻是解決了應用程式層面的問題,不可否認,在很多情況下,系統效能甚至故障是由SQL導致的,但在很多情況下,即使把SQL TUNING的再好,也是解決不了效能問題,這就要求我們對OS和DB層面進行整體分析和調優。

這篇文章到此為止,只是告訴大家,調優不僅僅是索引問題,還有很多方面需要我們去學習和研究,至於OS、DB和SQL TUNING調優的具體方法和步驟,請查閱本部落格其他文章。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.