MYSQL資料庫表結構優化方法詳解
本文例項講述了MYSQL資料庫表結構優化方法。分享給大家供大家參考,具體如下:
選擇合適的資料型別
1、使用可以存下你的資料的最小的資料型別
2、使用簡單的資料型別。Int要比varchar型別在mysql處理上簡單
3、儘可能的使用not null定義欄位
4、儘量少用text型別,非用不可時最好考慮分表
使用int來儲存日期時間,利用FROM_UNIXTIME()
【將int型別時間戳轉換成日期時間格式】,UNIX_TIMESTAMP()
【將日期時間格式轉換成int型別】兩個函式進行轉換
使用bigint來儲存IP地址,利用INET_ATON()
【將IP格式轉換成int】,INET_NTOA()
表的正規化化和反正規化化
正規化化是指資料庫設計的規範,目前的正規化化一般指第三設計正規化,也就是要求資料表中不存在非關鍵欄位對任意候選關鍵欄位
的傳遞函式依賴則符合第三正規化。
不符合第三正規化要求的表存在下列問題:
1、資料冗餘:(分類,分類描述)對於每一個商品都會進行記錄
2、資料的插入/更新/刪除異常
正規化化操作:
反正規化化是指為了查詢效率和考慮把原本符合第三正規化的表適當的增加冗餘,以達到優化查詢效率的目的,反正規化化是一種以空間來換取時間的操作。
例:
對錶進行反正規化化
反正規化化查詢訂單資訊:
表的垂直拆分
垂直拆分就是把原來 很多列的表拆分成多個表,這就解決了表的寬度問題。通常垂直拆分可以按以下原則進行:
1、把不常用的欄位單獨存放到一個表中。
2、把大欄位獨立存放到一個表中。
3、把經常一起使用的欄位放到一起。
水平拆分
表的水平拆分是為了解決單表的資料量過大問題,水平拆分的表每個表的結構都是完全一致的
常用的水平拆分方法:
1、對customer_id進行hash運算,如果要拆分成5個表則使用mod(custoneer_id,5)
取出0-4個值
2、針對不同的hashID把資料存到不同的表中
更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL查詢技巧大全》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》
希望本文所述對大家MySQL資料庫計有所幫助。