程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 高性能MySql閱讀筆記第四章--Schema與數據類型優化閱讀筆記2

高性能MySql閱讀筆記第四章--Schema與數據類型優化閱讀筆記2

編輯:MYSQL入門知識

高性能MySql閱讀筆記第四章--Schema與數據類型優化閱讀筆記2

Mysql schema設計

一.Mysql schema設計中的陷阱

1.當心自動生成的schema。寫的很爛的schema遷移程序,或者自動生成的schema的程序,都會導致嚴重的性能問題。

2.太多的列。Mysql的存儲引擎API工作時需要在服務器層和存儲引擎層之間通過行緩沖格式拷貝數據,然後在服務器層將緩沖內容解碼成各個列。從行緩沖中將編碼過的列轉換成行數據結構的操作代價是非常高的。

3.太多的關聯。

4.全能的枚舉。

5.變相的枚舉。

6.非此發明的NULL。之前寫了避免使用NULL的好處,並且建議盡量的考慮代替方案。但是遵循這個原則不要走極端,例如從特定類型的值域中選擇一個不可能的值(-1)代替NULL,可能導致代碼復雜很多,並且容易引入bug,處理NULL確實不容易,但有時候會比他的替代方案更好。

二.范式和反范式

對於任何給定的數據通常都有很多種表示方法,從完全的范式化到完全的反范式化,以及兩者的折中。在范式化的數據庫中,每個事實數據出現並且只出現一次。相反,在反范式的數據庫中,信息是冗余的,可能會存儲在多個地方。

1.范式的優點和缺點。

優點:

  范式的更新操作通常比反范式要快。

  當數據較好的范式化是,就只有很少或者沒有重復的數據,所以只需要修改更少的數據。

  范式化的表通常更小,可以更好的存放在內存裡,所以執行操作會更快。

  很少有多余的冗余數據意味著檢索列表數據時更少需要DISTINCT或者GROUP BY語句。

缺點:

  范式schema的缺點是通常需要關聯,稍微復雜一些的查詢語句在符合范式的schema上都可能需要至少一次關聯。

2.反范式的優點和缺點。

優點:

  反范式的schema因為所有數據都在一張表中,可以很好的避免關聯。

3.混用范式化和反范式化。

事實上,完全范式化和完全反范式化都是實驗室裡才有的東西。最常用的反范式化數據的方法是復制或者緩存,在不同的表中存儲相同的特定列,可以使用觸發器更新緩存值,這使得實現這樣的方案變得更簡單。

四.緩存表和匯總表

有時候提升性能最好的方法是在同一張表中保存衍生的冗余數據,有時候也需要創建一張完全獨立的匯總表或緩存表,這是非常好的方法。

五.物化視圖。

物化視圖實際上是預先計算並且存儲在磁盤上的表,可以通過各種各樣的策略刷新和更新。

六.計數器表。預制行。

七.加快ALTER TABLE操作的速度。通過MODIFY COLUMN,ALTER COLUMN操作來改變列的默認值。

八.只修改.frm文件。

下面這些操作可能不需要重建表。

1.移除一個列的 AUTO_INCREMENT屬性。

2.增加,移除或更改ENUM和SET常量,如果移除的是已經有行數據用到的常量,查詢將會返回一個空字符串。

總結:

良好的schema設計原則是普遍適用的,但Mysql有他自己的實現細節要注意,概括起來說,盡可能保持任何東西小而簡單總是最好的。

 

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