優化絕不僅僅只是索引

2021-12-29 22:31:34 字數 1076 閱讀 7181

一畢業就接觸優化方面的問題,專業做優化也有至少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層面進行整體分析和調優。

開始,希望不僅僅只是個開始

說起來很慚愧,乙個從事了7年c 開發的工程師今天第一次開通了自己的csdn部落格,以前很少來csdn,確切的說只有碰到問題搞不定了,才會來這裡,可以說csdn是 專業 的代稱,而我,算個業餘選手把。幸運地是,渾渾噩噩的日子也不算完全虛度,至少家庭和睦,寶寶乖巧,還早早地買了房,這算是時代對我的恩惠。...

轉身 再不僅僅只是開發人員

轉身 再不僅僅只是開發人員 前言 在人生的路上,有時候常常面臨著很多的抉擇,有的時候因為某些原因,我們不得不放棄之前的一些理想,改變自己的思想,重新選擇 在職業的道路上,亦是如此。本篇的議題如下 不再沉默,善待自己 改變自己,主動出擊 對技術的權衡 不再沉默 在很多人的眼中,開發人員是 沉默 的 每...

精益不僅僅只是乙個工具集

alan shalloway鼓勵大家去了解在精益實踐背後的重要原理,相關實踐者們最好對此心中有數。shalloway通過討論 物理世界 中的一些工具來樹立了他的觀點。他用了這樣乙個例子 木匠通常是怎麼知道在什麼情況下用直釘,什麼情況下用螺釘的。但是如果木匠不知道為什麼會這樣,不知道驅動這些的力學原理...