mysql資料庫優化--(2)設計 欄位型別的選擇
建表時,往往需要考慮欄位的型別的問題.
可優化性不強,需要注意以下的幾個原則
2.1 儘可能佔用更少的儲存空間
多少位元組Byte!
tinyint:1, smallint 2, mediumint 3, int 4, bigint 8
但是小空間帶來的問題,儲存量的減少,範圍的減少.
Boolean =tinyint
datetime:8 timestamp:4 datetimeyear
datetime和 timestamp的選擇?
儲存 2039年,超過了unix時間戳範圍:
timestamp欄位失敗了.
timestamp佔用4個位元組,儲存的時間範圍是有限的.1970-
例如儲存登入時間.就可以用timestamp來儲存.
2.2 儘可能定長(佔用固定的儲存空間)資料型別
定長的資料型別的運算速度,要不變長的資料型別速度快.
型別:char(32), varchar(32)
資料:hellokang, hellokang
空間:32, 9+1(1個空間記錄長度)
如果在乎儲存空間:varchar
在乎的計算效率:char,最大長度為255
varchar()於 text的選擇?
varchar,佔用記錄的儲存空間
text,不佔用記錄的儲存空間
一條記錄的儲存的空間有最大的限制,預設是65535Bytes
浮點
浮點,更在乎儲存空間,不能保留全部的精度.定長資料型別,佔用固定的儲存空間.
定點,更在乎精度,保留精度.佔用非固定的儲存空間,隨著有效數位增加,而佔用更多的儲存空間.
PHP,float,他是雙精度的double,佔用8個位元組!
2.3 儘可能用整數代替字串
整數計算能力最強.
典型的 ipv4的儲存,可以轉成int.(儲存空間小,整數計算快)
使用起來是字串,儲存起來是整數
enum,列舉,單選: 0 / 1
set集合,複選: 1 2 3 4 5 ...