標籤:ar 使用 sp 資料 bs amp 時間 sql c
Schema與資料類型最佳化:
1.選擇最佳化的資料類型
更小的通常更好:一般情況下,盡量使用可以正確儲存資料的最小資料類型
如:只需存0-200,tinyint unsigned更好。
簡單就好:如:整型比字串操作代價更低,應該使用mysql內建類型而不是字串來儲存日期和時間。
盡量避免NULL:通常情況下最好指定列為NOT NULL,除非真的要儲存NULL值。如:查詢中包含可為NULL的列對mysql來說更難最佳化。
2. 選擇類型範圍
如DATETIME和TIMESTAMP列都可以儲存相同類型的資料(時間和日期,精確到秒),但TIMESTAMP只使用
DATETIME一半的儲存空間,並且會根據時區變化,具有特殊的自動更新能力。
3.整數類型
有兩種類型的數字:整數和實數
如果儲存整數,可使用TINYINT(8),SMALLINT(16),MEDIUMINT(24),INT(32),BIGINT(64).
整數類型有可選的UNSIGNED屬性,表示不允許負值,可使正數上限提高一倍。如TINYINT UNSIGN可以儲存的範圍是0~255.
有符號和無符號使用相同的儲存空間,並具有相同的效能。
4.實數類型:實數是帶有小數部分的數字。
5.字串類型:VARCHAR和CHAR是最主要的字串類型。
VARCHAR:用於可變長字串,比定長更省空間,因為它僅使用必要空間。
適合使用VARCHAR的情況:字串列的最大長度比平均長度大很多;列的更新很少;
使用了UTF-8字元集
CHAR:是定長的,適合儲存短的字串,或所有值都接近同一個長度。如:儲存密碼的MD5值,
因為這是一個定長的值。對於經常變更的資料,CHAR也比VARCHAR好,因為定長類型不容易產生片段。
對於非常短的列,CHAR比VARCHAR在儲存空間上也更有效率。如:用CHAR(1)儲存只有N和Y的值只需一個位元組,
但用VARCHAR(1)卻要兩個位元組,因為還有一個記錄長度的額外位元組。
使用varhar(5)和和char(5)儲存‘hello’的空間開銷是一樣的,更長的列會消耗更多的記憶體。
mysql的schema與資料類型最佳化分析