優化數據庫對象

 

1 優化表的數據類型

 

 

表需要使用何種數據類型,是需要根據應用來判斷的。雖然應用設計的時候需要考慮字段的長度留有一定的冗餘, 但是不推薦讓很多字段都留有大量的冗餘, 這樣即浪費存儲也浪費內存。

 

我們可以使用PROCEDUREANALYSE()對當前已有應用的表類型的判斷,該函數可以對數據表中的列的數據類型提出優化建議, 可以根據應用的實際情況酌情考慮是否實施優化。

語法:

SELECT * FROM tbl_name PROCEDURE ANALYSE();

SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256);

輸出的每一列信息都會對數據表中的列的數據類型提出優化建議。第二個例子告訴PROCEDUREANALYSE()不要爲那些包含的值多於 16個或者少於256字節的ENUM類型提出建議。

如果沒有這樣的限制,輸出信息可能很長;ENUM定義通常很難閱讀。在對字段類型進行優化時,可以根據統計信息並結合應用的實際情況對其進行優化。

 

 

 

2 通過拆分,提高表的訪問效率

 

這裏我們所說的拆分,主要是針對Myisam類型的表,拆分的方法可以分成兩種情況:

1. 縱向拆分:

縱向拆分是指按照應用訪問的頻度, 將表中經常訪問的字段和不經常訪問的字段拆分成兩個表,經常訪問的字段儘量是定長的,這樣可以有效的提高表的查詢和更新的效率。

2. 橫向拆分:

橫向拆分是指按照應用的情況, 有目的的將數據橫向拆分成幾個表或者通過分區分到多個分區中,這樣可以有效的避免Myisam表的讀取和更新導致的鎖問題。

 

 

3 逆規範化

 

數據庫德規範化設計強調數據的獨立性, 數據應該儘可能少地冗餘, 因爲存在過多的冗餘數據, 這就意味着要佔用了更多的物理空間, 同時也對數據的維護和一致性檢查帶來了問題。

 

但是對於查詢操作很多的應用, 一次查詢可能需要訪問多表進行, 如果通過冗餘紀錄在相同表中,更新的代價增加不多,但是查詢操作效率可以有明顯提高,這種情況就可以考慮通過冗餘數據來提高效率。

 

 

4 使用冗餘統計表

 

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

 

 

5 選擇更合適的表類型

 

1、如果應用出現比較嚴重的鎖衝突,請考慮是否更改存儲引擎到innodb,行鎖機制可以有效的減少鎖衝突的出現。

2、如果應用查詢操作很多,且對事務完整性要求不嚴格,則可以考慮使用Myisam存儲引擎。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章