本章主要介紹:數據類型對性能的影響html
mysql支持不少中數據類型,因此準時下面幾個原則有利於作出更好的選擇mysql
(1) 更好的一般更好,好比:一個字段(varchar)若是數據最長是10位,設計爲varchar(100) 就對性能很影響spring
(2) 簡單就好:好比整數比字節操做代價更低sql
字符集和校對規則是的字符比整數更復雜緩存
(3)儘可能避免null性能
若是查詢在包含可爲null的列,對mysql來講更加難優化優化
整數分類:加密
(1)整數:不帶小數點的數字spa
(2)實數 帶小數點部分的數字.net
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比較:
優勢:精確度高
缺點:消耗資源多
經常使用字符串類型: varchar 、char
(1)varchar 保存的確定是存儲數據大小,char纔是設定長度的,
(2) varchar(255) 佔用實際存儲數據+1個字節 varchr(256) 佔用實際數據長度+2
varchar(n):無論是否用了n個空間 都會消耗n個字節
(3) 效率上vachar 是固定長度 效率更高
(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) 適合存儲很短的字符串 或者 存儲全部值都接近的長度, 如加密後的MD5
(3) char比varchar在存儲空間上更有效率,如:varchar(1) 佔用2個字節,另外一個記錄長度,char(1)只須要1個字節,並且char查詢速度也更高
(1)timestamp 時間範圍小,datetime時間範圍大 可是精確度都是 yyyy-MM-dd HH:mm:ss,通常狀況timesatamp夠用
(2)timestamp佔用4個字節 datetime佔用8個字節
總結:平時開發用timestamp
使用:
https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
(1) 第一範式(確保每列保持原子性)
(2) 第二範式(確保表中的每列都和主鍵相關)
(3) 第三範式(確保每列都和主鍵列直接相關,而不是間接相關)
主要針對 第三範式:確保每列都和主鍵列直接相關,而不是間接相關
遵照第三範式:
反範式:
將用戶數據 冗餘到訂單信息表中,這樣不需再關聯表 查詢效率提升,缺點:數據被冗餘了
定義:就是優先處理完成的數據結果表
(1) 用途1:對於數據交易十分頻繁的系統咱們要統計 用戶實時登陸狀況很難,就可使用定時任務彙總數據到一張表中
(2) 用途2:對於政府那種須要統計不少數據 求出須要數據的(很佔用內存),能夠在晚上使用定時任務跑出上一天的數據
實現方式:
(1) mysql 定時執行任務 https://my.oschina.net/springMVCAndspring/blog/1820684
(2) spring定時任務: http://cron.qqe2.com/