一.選擇優化的資料類型
1.更小的通常更好:如果隻要儲存1~200,tinyint unsigned更好.因為占用更小的記憶體和磁盤空間.
2.簡單就好: 簡單資料類型需要更小的CPU時間周期.例如:整型比字元操作代價更低(字元集的問題).使用mysql自帶類型取代字元串(date,datetime),使用整型存儲IP.
3.盡量避免Null:單列索引無法儲null值,複合索引無法儲全為null的值.Innodb使用單獨的位(bit)存儲Null值,是以對于稀疏結構(列中大部分都是Null)有很好的空間效率.(不适用myisam).
4.mysql資料類型可以存儲相同類型的資料,隻是存儲的長度和範圍不一樣,允許的精度不同,需要的空間不同.
例如:Datetime和timestamp可以存儲相同類型的資料,然而timestamp隻占用一半的空間.但是它有一個時間範圍.
1.1 整數類型
整數可以使用: tinyint,smallint,mediumint,int,bigint.分别使用8,12,16,24,32,64位存儲空間.存儲範圍是-2的n-1次方到2的n-1次方.
1.2 實數類型
Decimal可以存儲比bigint更大的整數.(最多允許65個數字)
1.3 字元串類型
varchar
比定長的更省空間,如果設定了ROW_FORMAT=FIXED 就不起作用.varchar需要額外一個或兩個位元組記錄字元串長度.
下列情況使用varchar是合适的: 字元串列的最大長度比平均長度大很多; 列的更新很少;使用 UTF8這樣的字元集,每個字元使用不同位元組數存儲。
char
char類型是定長的:char會删除資料末尾的所有空格.
enum
使用枚舉代替字元類型.
例如: create table test { e enum('fish','apple','pear') not null}.
select e + 0 from test 結果會是數字
二.加快alter table速度
alter table modify column .... 會拷貝整張表到另一張表
alter table alter column... 隻修改.frm檔案而不涉及表資料,這個操作很快
三.快速建立myisam索引
alter table tablename disable keys;//禁用索引
load data;
alter table tablename enable keys;//啟用索引
不過這種方法對于唯一索引不起作用