關於SQL以及索引優化的部分終於學習完了,今天開始進入第二層次的學習,數據庫的結構優化,第一部分,選擇合適的數據類型。
mysql
數據類型的選擇,重點在於合適二字。sql
1. 使用能夠存下數據的最小的數據類型數據庫
好比,一個時間類型的一個數據,可使用varchar,可使用datetime,還可使用int,如何選擇,就看哪種類型對咱們來講是最小的,不言而喻,int類型相對來講是最小的數據類型。
函數
2. 使用簡單的數據類型。學習
int類型要比varchar類型在mysql處理上簡單的多,用int類型來存儲時間是一個很是好的選擇。大數據
3. 儘量的使用not null來定義字段。優化
這是由於innodb的一些特性所決定的,對於一些爲null的字段,他可能須要一些額外的字段來進行存儲,同時也會增長IO和存儲的開銷,因此在進行表結構設計的時候,儘可能把每個字段設計成not null,而且給出一個默認值。
設計
4. 儘可能少的使用一些大的類型,好比:text類型索引
若是非用不可的狀況下,最好把這些字段單獨提出來,存在一張附加表之中,一方面增長了主表的查詢效率,另外一方面在須要的時候對附加表進行這種大數據的查詢。
ip
使用int類型來存儲時間,利用FROM_UNIXTIME()和UNIX_TIMESTAMP()兩個函數來進行轉換。
如 FROM_UNIXTIME(1443922330,‘%Y-%m-%d’); 獲得一個格式化的:年-月-日
UNIX_TIMESTAMP('2015-10-4'); 獲得一個時間戳
使用bigint類型來存儲ip地址,利用INET_ATON(),INET_NTOA()兩個函數來進行轉換
如 INET_ATON('127.0.0.1') 返回一個整形
INET_NTOA(ip) 返回一個ip地址
存儲ip地址除了使用varchar以外,還可使用bigint類型存儲,varchar來存儲ip的話,大約須要15個字節,而bigint只須要8個字節,相差了7個字節,不要小看這7個字節,數據量很大的狀況下,7個字節能給咱們節省很大的存儲空間,而且會給IO效率,內存帶來很大的節約。能爲重要的是,不單單在空間上有節約,在ip地址的對比上,也會有好處,由於整形對比要比varchar對比更簡單,更高效。