mysql 類型優化(二)

1、BOLB和TEXT類型app

    BOLB和TEXT都是爲存儲很大的灱而設計的字符串數據類型,分別採用二進制和字符方式存儲。
函數

    它們分別屬於兩組不一樣的數據類型家族:字符類型、二進制類型。
設計

MySQL把每一個BOLB和TEXT值看成一個獨立的對象處理。當BOLB和TEXT值太大時,InnoDB會使用專門的「外部」存儲區域來進行存儲,此時每一個值在行內須要1~4個字節存儲一個指針,而後用存儲區域存儲實際的值。若是隻須要排序前面的幾個字段,能夠經過ORDER BY SUSTRING(column,length)指針

2、使用枚舉(ENUM) 代替字符串類型對象

    有時可使用枚舉列代替經常使用的字符串類型。枚舉能夠把一些不重複的字條串存儲成一個預約義的集合。
排序

    MySQL在存儲枚舉時將每一個值在列表中位置保存爲整數,而且在表的 .frm文件中保存 "數字 - 字符串" 映射關係的 「查詢表」。
索引

例子:字符串

 CREATE TABLE enum_test(test

 e ENUM('fish','apple','dog') not nullselect

 );

INSERT INTO enum_test(e) VALUES('fish'),('dog'),('apple');

select e+0 from enum_test;


另外讓人吃驚的地方是,枚舉字段是按照內部存儲的整數而不是定義的字符串進行排序的。

SELECT  e FROM enum_test ORDER BY e;

若是想繞過這種限制,按照須要的順序來定義枚舉列。另外也能夠在查詢 中使用FIELD()函數顯式地指定排序順序,但這會致使MySQL沒法利用索引消除排序。

例:SELECT  e FROM enum_test ORDER BY FIELD(e,'apple','dog','fish');

枚舉很差的地方:字條串列表是固定的,添加或刪除字符串必須使用ALTER TABLE ,所以,對於一系列將來可能會改變的字符串,使用枚舉就不是一個好主意,出除非能夠接受,在列表末尾添加元素,這樣在MySQL 5.1 中就能夠不用重建整個表來完成修改。

相關文章
相關標籤/搜索