(4)mysql最佳化之資料庫表設計最佳化,mysql資料庫

來源:互聯網
上載者:User

(4)mysql最佳化之資料庫表設計最佳化,mysql資料庫
概述

在資料庫設計過程中,使用者可能會經常遇到這樣的問題:1.表裡面的欄位到底該設定多長合適?2.是否應該把所有表都按照第三範式來設計?

最佳化表的資料類型 1.文法

表的資料類型參見連結:
http://blog.csdn.net/pursuing0my0dream/article/details/44729707

在mysql中,我們可以使用函數 procedure analyse()對資料庫中的表進行分析,該函數可以對資料表中的列的資料類型提出最佳化建議。

#文法select * from table_name procedure analyse();#或select * from table_name procedure analyse(element_num,max_memory);

第2個語句中告訴該函數不要為那些包含的值多於element_num個或者max_memory個位元組的enum類型提出建議。如果沒有這些限制,輸出資訊可能很長,enum類型定義通常很難閱讀。

2.舉例
SELECT * FROM c PROCEDURE ANALYSE(16,255);


field_name 對於表哪個欄位,optimal_fieldtype給出最佳化建議。

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

對資料表的拆分,分為兩種拆分方式:垂直分割,水平分割

1.垂直分割(分表)

即把主鍵和一些資料表的列放在一個表中,然後把主鍵和另一些資料表的列放在一個表中。
如果一個表的某些列常用,另一些不常用,則可以採用垂直分割。垂直分割可以使資料行變小,一個資料頁就可以存放更多的資料,在查詢時候可以減少I/O次數。其缺點是需要管理冗餘列,查詢所有資料時候需要join尋找。

2.水平分割(分表,分區)

即把資料表中的列根據一定規則放在多個獨立的表或分區中。水平分割使用情境:

  • 表很大,分割後可以降低查詢時候需要讀取的資料和索引的頁數,同時降低索引的層數,提高查詢速度。
  • 表中的資料是獨立的,例如表中分別記錄各個地區的資料或不同時期的資料,特別是有些資料常用,而另一些資料不常用。
  • 需要把資料放在多個儲存介質上。
逆正常化

 &esmsp;在資料庫設計中,正常化越高,那麼產生的關係就越多,直接導致表與表之間的join操作越頻繁,而join操作又是一種效能比較低的操作,直接影響到查詢的速度。
  反正常化的好處是降低了join操作的需求,降低了外鍵和索引數目。還可以減少表的個數,相應的帶來的問題是可能出現資料的完整性問題。加快查詢速度,但會降低修改速度。

相關文章

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.