一、选择数据类型的基本原则
1、Myisam 数据表,最好使用固定长度的数据列代替可变长度数据列
2、InnoDB 建议使用VARCHAR类型 , CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和I/O是比较好的
二、数据列选择
1、 char 与 varchar 建议使用varchar 可变长度保存 节省空间
2、 text 和 blod
a、使用合成的索引
合成的索引列在某些时候是有用的,是根据其它的列的内容建立一个散列值,并把这个值存储在单独的数据列中。我们要注意这种技术只能用于精确匹配的查询,我们可以使用MD5()函数生成散列值,也可以使用SHA1()或CRC32(),或者使用自己的应用程序逻辑来计算散列值。
合成的散列索引对于那些BLOB或TEXT数据列特别有用。用散列标识符值查找的速度比搜索BLOB列本身的速度快很多。
b、在不必要的时候避免检索大型的BLOB或TEXT值。
BLOB或TEXT标识符信息存储在合成的索引列中,可以搜索索引列,决定那些需要的数据行,然后从合格的数据行中检索BLOB或 TEXT值。
c、把BLOB或TEXT列分离到单独的表中。
在某些环境中,把这些数据列移动到第二张数据表中,可以让你把原数据表中 的数据列转换为固定长度的数据行格式,这会减少主表中的碎片,使你得到固定长度数据行的性能优势。它还使你在主数据表上运行 SELECT *查询的时候不会通过网络传输大量的BLOB或TEXT值
d、浮点数与定点数
在 mysql 中 float、double(或 real)是浮点数,decimal(或 numberic)是定点数。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;
它的缺点是会引起精度问题。
注意一下几点:
a)、浮点数存在误差问题;
b)、对货币等对精度敏感的数据,应该用定点数表示或存储;
c)、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
d)、要注意浮点数中一些特殊值的处理。