存儲引擎 事務 鎖顆粒 主要應用 忌用
MyISAM 不支持 支持併發插入的表級鎖 SELECT,INSERT 讀寫操做頻繁
MEG_MyISAM 不支持 支持併發插入的表級鎖 分段歸檔,數據倉庫 全局查找過多的場景
Innodb 支持 支持MVCC的行級鎖 事務處理 無
Archive 不支持 行級鎖 日誌記錄,只支持 須要隨即讀取更新刪除
Ndb cluster 支持 行級鎖 高可用性 大部分應用數據庫
MyISAM 5.5默認引擎 讀寫高效,寫的時候要鎖表,量大容易阻塞
Innodb 阻塞更少
Ndb cluster MySQL集羣併發
全部對象命名應該遵循的原則:
1.可讀性
使用大寫和小寫來格式化的庫對象名以得到良好的可讀性。
例如:使用CustAddress而不是custaddress來提升可讀性
(這裏要注意有些DBMS系統對錶名的大小寫敏感設置)函數
2.表意性
對象的名字應該能描述它所標識的對象。
例如:對於表,表的名稱應該可以體現表中存儲的數據內容;
對於存儲過程,存儲過程名稱應該可以體現存儲過程的功能。性能
3.長明原則
儘量少使用或者不使用縮寫,
適用於數據庫(DATABASE)名以外的任一對象大數據
生日:1978-03-01
Char(10)三 / varchar(20)四 / Datetime 二 / Int 一spa
原則:列的數據類型一方面影響數據存儲空間的開銷,
另外一方面也會影響數據查詢性能。當一個列能夠選擇多種數據類型時,
應該優先考慮數據類型,其次是日期或者二進制類型,最後是字符類型。
對於相同級別的數據類型,應該優先選擇佔用空間小的數據類型。日誌
列類型 | 存儲空間
TINYINT 1字節
SMALLINT 2字節
MEDIUMINT 3字節
INT 4字節
BIGINT 8字節
DATE 3字節
DATETUNE 8字節
TIMESTANP 4字節
CHAR(M) M字節,1<= M <= 255
VARCHAR(M) L+1字節,在此L <= M 和 1 <= M <= 255對象
以上選擇原則主要是從下面兩個角度考慮:
1.在對數據進行比較(查詢條件,JOIN條件及排序)操做時:
一樣的數據,字符處理每每比數字處理慢。
2.在數據庫中,數據處理以頁爲單位,列的長度越小,利於性能提高。排序
具體選擇:
char/varchar 如何選擇
原則:
1.若是列中要存儲的數據長度差很少一致的,應該選擇考慮用char;不然考慮用varchar
2.若是列中的最大數據長度小於50Byte,則通常考慮用char。
(固然,若是這個列不多用,則基於節省空間和減小I/O的考慮,仍是能夠選擇用varchar)
3.通常不宜定義大於50Byte的char類型列。
utf8 = 1字符 = 3字節事務
decimal與float 如何選擇
原則:
1.decimal用於存儲精確數據,而float只能用於存儲非精確數據
故精確數據只能選擇用decimal類型。
2.因爲float的存儲空間開銷通常比decimal小(精確到7位小數只須要4個字節,而精確到15位小數只須要8字節)
故非精確數據優先選擇float類型。
時間類型如何存儲
1.使用int來存儲時間字段的優缺點
優勢:字段長度比datetime小。
缺點:使用不方便,要進行函數轉換。
限制:只能存儲到2018-1-19 11:14:07即2^32爲2147483648
2.須要存儲的時間粒度
年月日小時分秒周
總結:若是不常常查詢出來展現的,可使用int便可,
若是是須要常常查詢出來判斷或者什麼的仍是存datetime方便,不須要轉換。
=====未完待續