63. mysql==>schema與數據類型優化

 

本章主要介紹:數據類型對性能的影響html

1.選擇優化的數據類型

mysql支持不少中數據類型,因此準時下面幾個原則有利於作出更好的選擇mysql

(1) 更好的一般更好,好比:一個字段(varchar)若是數據最長是10位,設計爲varchar(100) 就對性能很影響spring

   

 

(2) 簡單就好:好比整數比字節操做代價更低sql

    字符集和校對規則是的字符比整數更復雜緩存

(3)儘可能避免null性能

  若是查詢在包含可爲null的列,對mysql來講更加難優化優化

 

1.1 數字類型

整數分類:加密

              (1)整數:不帶小數點的數字spa

              (2)實數  帶小數點部分的數字.net

 

1.1.1 整數

    

1.1.2 小數

     mysql存儲數字類型的小數有三種方式:

                              float: 佔用4 個字節 

                           double:佔用8 個字節 

                          decimal:    DECIMAL(M,D)           M字節(D+2 , 若是M < D) 

decimal用於精確度要求高的數據,它比浮點型(float、double消耗更多的空間

DECIMAL(M,D) :  M:總的位數   D:小數點位數      如 Decimal(5,2) :數據總長爲5,小數點後面保留2位 前面保留3位   

浮點型與decemal比較:

                                優勢:精確度高

                                缺點:消耗資源多

1.2 字符串類型

經常使用字符串類型: varchar 、char

(1)varchar 保存的確定是存儲數據大小,char纔是設定長度的,

(2) varchar(255) 佔用實際存儲數據+1個字節  varchr(256) 佔用實際數據長度+2

           varchar(n):無論是否用了n個空間 都會消耗n個字節

(3) 效率上vachar 是固定長度 效率更高

1.2.1 varchar

  (1) 定義: varchar用於存儲可變字符串

  (2)varchar(N):表示最多存儲N個字符,實際應用中佔用存儲是根據實際存儲的數據決定(如:varchar(5) 最多存放5個字符,可是我存放了2個,佔用空房=2+1=3個字符,這裏的2是數據字符,1是記錄字符串長度)

(3) varchar(5) 與varchar(255) 均可以存儲  hello  並且空間開銷都同樣是5+1字節

         可是在mysql在利用內存塊來保存內存值的時候,尤爲是對數據進行排序的時候會按照表設計的大小佔用空間,若是過大就很糟糕了

轉:https://blog.csdn.net/xie_cinnamon/article/details/98314346

(4)varchar 在保存數據的時候  不會截掉最後的空格,因此在代碼開發中記得使用trim()去掉先後空格

(5) UTF-8 狀態下,單個 varchar 長度不能超過 (65535 - 2) / 3 = 21844

1.2.2  char

     (1)  類型是定長的

   (2) 適合存儲很短的字符串 或者  存儲全部值都接近的長度, 如加密後的MD5

   (3) char比varchar在存儲空間上更有效率,如:varchar(1) 佔用2個字節,另外一個記錄長度,char(1)只須要1個字節,並且char查詢速度也更高

 

1.3 日期和時間類型

(1)timestamp 時間範圍小,datetime時間範圍大  可是精確度都是   yyyy-MM-dd HH:mm:ss,通常狀況timesatamp夠用

(2)timestamp佔用4個字節  datetime佔用8個字節  

總結:平時開發用timestamp

 使用:

          

  2.mysql schema設計

2.1 mysql範式與反範式

2.1.1 mysql範式

https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

 

(1) 第一範式(確保每列保持原子性)

(2)   第二範式(確保表中的每列都和主鍵相關)

(3) 第三範式(確保每列都和主鍵列直接相關,而不是間接相關)

 

2.1.2 mysql 反範式

 主要針對 第三範式:確保每列都和主鍵列直接相關,而不是間接相關

    遵照第三範式:

                

 

反範式:

          將用戶數據 冗餘到訂單信息表中,這樣不需再關聯表 查詢效率提升,缺點:數據被冗餘了

2.2  mysql 緩存表

    定義:就是優先處理完成的數據結果表

(1) 用途1:對於數據交易十分頻繁的系統咱們要統計 用戶實時登陸狀況很難,就可使用定時任務彙總數據到一張表中

(2) 用途2:對於政府那種須要統計不少數據 求出須要數據的(很佔用內存),能夠在晚上使用定時任務跑出上一天的數據

實現方式:

      (1) mysql 定時執行任務  https://my.oschina.net/springMVCAndspring/blog/1820684

     (2)   spring定時任務:   http://cron.qqe2.com/

相關文章
相關標籤/搜索