DB最佳化簡單總結

來源:互聯網
上載者:User

          一個功能的實現簡單,但是一個功能能夠在滿足使用者體驗度的情況下實現就不是都那麼容易了。例如在評教系統中,在考試系統,在選課系統中,甚至高一點到我們的12306系統中,如何在高使用者量,高並發的情況下,還能保證高效的運行,這次是更難於解決的,需要我們下更多功夫所在的地方。


         這裡從實際項目開發中,提取一點經驗,雖然看似小,但是做好了,卻會對效率有很大的不同,這裡從資料庫的設計到應用兩個方面來提一些作為我們程式員可以改善的地方。


         一,設計:


          1,首先就是範式的靈活運用,一般情況下三範式是我們設計資料庫所要遵循的原則。但是我們需要根據實際情況實際對待,有時候適當的冗餘欄位,減少表之間的串連,反而會大大提高查詢效率。這裡不僅僅要考慮各種設計原則,還需要考慮在真正的使用當中,查詢那個表多,操作那個表中的資料多等等,通過全方位的考慮,來設計表的結構。要以最後的效果為指揮棒來進行設計,不要墨守成規即可。當然了這是很難掌握的,需要很多的項目經驗才能夠達到我們想要的效果。


         2,索引的建立:索引需要建立的適當,應該對常查詢的表中添加索引,而不要一味盲目的使用索引,因為要是維護索引的付出小於他的回報,那麼就沒有意義,反而更加麻煩了。


        3,對錶進行劃分:這裡想提一下水平劃分,垂直劃分和時間軸劃分


           水平劃分:就是根據某個欄位將表分成若干個表。例如在學生管理系統中,可以根據學院將學生資訊表劃成更多張,更或者根據年級再次劃分,這樣相當於一個學院一張表或者一個年級一張表。這裡想提的就是對錶進行劃分的粗細程度,根據資料量,查詢頻率等進行劃分,找到一個最恰當的粒度,還是需要開發人員有很高的水平的。


         垂直劃分:  這裡其實就是三範式的靈活運用,例如還是學生資訊表,還可以劃分為學生基礎資訊表,和學生獲獎資訊表等,還是根據查詢使用的欄位進行劃分,方便我們對資料的處理即可。


         時間軸劃分:這種情況是針對資訊的產生量過大的情況下,例如每天有大量的資訊收集,我們可以根據月,周,天甚至小時進行對錶劃分。因為一些曆史資訊我們很少情況下才會用到的,這樣我們保證最新資訊的查詢高效更重要。

 

         4,欄位的類型選擇要恰當:這裡包括欄位的長度,類型等,要根據實際儲存的資料進行選擇,長度不要過長,否則會大大影響效率。

 

        5,外鍵要慎用:因為主鍵代表著一張表,而外鍵就代表著一群表,對錶與表之間進行了關聯,一表動就會引起另一張表的。有的情況下我們甚至可以不適用外鍵,及時有這種關係,我們通過sql語句進行關聯即可。

 

         二,操作資料庫:


            1,盡量多使用PrepareStatement,少用Statement。因為PrepareStatement是進行先行編譯的,對於同類型的sql語句編譯一次即可。提高了效率。


            2,Connection設定為readOnly,Connetion是對資料庫的串連,屬於重量級的,我們只是使用它即可。


            3,當然了緊跟著就是串連池(Connection pool)的使用,提前準備好一定數量的資料庫連接,這樣會大大提高我們隊資料庫的訪問速率。這裡需要提一下MySql提供的資料庫連接池預設的為100個connection。Oracle10g預設的是150個串連數。


            4,在jdbc中採用批量(batch)處理,可以減少資料庫的訪問次數,這樣也會大大提高效率。


            5,sql語句的編寫,減少巢狀查詢的使用,減少group和having子句的應用。


            6,利用視圖(View),採用資料庫本身機制進行分頁查詢,提高效能。


          ……

 

         綜上為資料庫方面的最佳化,雖然提到的點都是比較小的,但是都是非常使用的,實在我們開發中可以很容易控制的,只要我們多用心,多思考,多聯絡實際情況,會在資料庫效率方面大大提高的。很多需要靠我們經驗來進行處理,所以經曆過會收穫很多的……積累……

相關文章

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.