1. 程式人生 > >MySQL效能優化四之資料庫結構優化

MySQL效能優化四之資料庫結構優化

1.選擇合適資料型別

1.1.使用可以儲存你資料型別的最小資料型別。

1.2.使用簡單的資料型別。

1.3.儘量使用NOT NULL定義欄位。

1.4.儘量少用大的型別(text),非用不可使用從表拆分出來。

1.5.例子:

1.5.1.利用Int型別儲存日期型別:利用FROM_UNIXTIME()函式(int轉日期型別)和UNIX_TIMESTAMP()函式(日期轉為int型別)。

1.5.2.IP地址儲存:使用BIGINT型別,利用INET_ATON()函式和INET_NTOA()函式(轉回成IP)。

2.表的正規化的優化

2.1.資料庫三大正規化:

1)每一列都是不可分割的基本資料項,同一列不能有多個值。

2)每個例項(行、記錄)能夠唯一的區分(主鍵)。

3)資料庫表不包含其他資料庫表中非主鍵關鍵字資訊(減少欄位冗餘)。

3.表的反正規化的優化

1)為了查詢效率把符合第三正規化的表增加適量的冗餘,達到優化查詢的目的,反正規化優化是以空間換取時間的操作(嚴格遵循第三正規化會導致很多使用臨時表的SQL操作,會增加IO操作降低查詢效率;此時通過SQL優化是達不到我們優化目的的只能修改表結構增加適量的冗餘)。

4.表的垂直拆分(把含有多個列的表拆分成多個表,解決表寬度問題)

4.1.把不常用的欄位單獨放在同一個表中

4.2.把大欄位獨立放入一個表中

4.3.把經常使用的欄位放在一起

5.表的水平拆分(為了解決資料表中資料過大的問題,水平拆分每一個表的結構都是完全一致的)

5.1.如何將資料平分到N張表中的常用方法:

1)ID進行hash運算,如果要拆分成5個表,mod(id,5)取出0~4個值

2)針對不同的hashID將資料存入不同的表中

5.2.水平拆分帶來的問題和挑戰

1)跨分割槽表的資料查詢

2)統計及後臺報表的操作