程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 優化篇之數據庫對象

mysql 優化篇之數據庫對象

編輯:MySQL綜合教程

(1)優化表的數據類型

     表需要使用何種數據類型,是需要根據應用來判斷的。雖然應用設計的時候需要考慮字段的長度留有一定的冗余,但是不推薦讓很多字段都留有大量的冗余,這樣即浪費存儲也浪費內存。 我們可以使用PROCEDURE ANALYSE()對當前已有應用的表類型的判斷,該函數可以對數據表中的列的數據類型提出優化建議,可以根據應用的實際情況酌情考慮是否實施優化。 語法:

SELECT ** FROM tbl_name PROCEDURE ANALYSE(,);

 

    輸出的每一列信息都會對數據表中的列的數據類型提出優化建議。第二個例子告訴PROCEDURE ANALYSE()不要為那些包含的值多於16個或者256字節的ENUM類型提出建議。如果沒有這樣的限制,輸出信息可能很長;ENUM定義通常很難閱讀。 在對字段類型進行優化時,可以根據統計信息並結合應用的實際情況對其進行優化。

(2)通過拆分,提高表的訪問效率
    這裡我們所說的拆分,主要是針對Myisam類型的表,拆分的方法可以分成兩種情況:
      1. 縱向拆分: 縱向拆分是只按照應用訪問的頻度,將表中經常訪問的字段和不經常訪問的字段拆分成兩個表,經常訪問的字段盡量是定長的,這樣可以有效的提高表的查詢和更新的效率。
      2. 橫向拆分: 橫向拆分是指按照應用的情況,有目的的將數據橫向拆分成幾個表或者通過分區分到多個分區中,這樣可以有效的避免Myisam表的讀取和更新導致的鎖問題。

(3)逆規范化
    數據庫德規范化設計強調數據的獨立性,數據應該盡可能少地冗余,因為存在過多的冗余數據,這就意味著要占用了更多的物理空間,同時也對數據的維護和一致性檢查帶來了問題。 但是對於查詢操作很多的應用,一次查詢可能需要訪問多表進行,如果通過冗余紀錄在相同表中,更新的代價增加不多,但是查詢操作效率可以有明顯提高,這種情況就可以考慮通過冗余數據來提高效率。

(4)使用冗余統計表
    使用create temporary table語法,它是基於session的表,表的數據保存在內存裡面,當session斷掉後,表自然消除。 對於大表的統計分析,如果統計的數據量不大,利用insert。。。select將數據移到臨時表中比直接在大表上做統計要效率更高。

(5)選擇更合適的表類型
     1、如果應用出現比較嚴重的鎖沖突,請考慮是否更改存儲引擎到innodb,行鎖機制可以有效的減少鎖沖突的出現。
     2、如果應用查詢操作很多,且對事務完整性要求不嚴格,則可以考慮使用Myisam存儲引擎。 更多存儲引擎選擇的原則,請參考開發篇的相關章節。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved