首页 > 技术文章 > mysql基础知识

tangchuanyang 2016-10-24 14:34 原文

一、小数问题
对于小数的表示,MySQL分为两种方式:浮点数和定点数。
浮点数包括float(单精度)double(双精度),
而定点数则只有decimal 一种表示。
定点数在MySQL 内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
 
二、时间类型                                                  所占字节数
如果表示年月日:DATE                                   4
如果表示年月日时分秒:DATETIME            8
如果只用来表示时分秒:TIME                       3
如果经常插入或者更新当前系统时间:TIMESTAMP     4
如果只表示年份:YEAR                                   1
 
三、ENUM
enum('M','F')的第一值'M',这点用户在使用时要特别注意。
另外,ENUM 类型只允许从值集合中选取单个值,而不能一次取多个值
 
四、SET
SET 类型可以从允许值集合中选择任意1 个或多个元素进行组合,所以对于输入的值只要是
在允许值的组合范围内,都可以正确地注入到SET 类型的列中。对于超出允许值范围的值例
如('a,d,f ')将不允许注入到上面例子中设置的SET 类型列中,而对于( 'a,d,a' )这样包含重
复成员的集合将只取一次,写入后的结果为“a,d”
 
 
五:varchar和char
MySQL 中,不同的存储引擎对 CHAR VARCHAR 的使用原则有所不同,这里简单概括如下。
MyISAM 存储引擎:建议使用固定长度的数据列代替可变长度的数据列。
MEMORY 存储引擎:目前都使用固定长度的数据行存储,因此无论使用 CHAR VARCHAR 列都没有关系。两者都是作为 CHAR 类型处理。
InnoDB 存储引擎:建议使用 VARCHAR 类型。对于InnoDB 数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的 CHAR 列不一定比使用可变长度 VARCHAR 列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于 CHAR 平均占用的空间多于VARCHAR,因此使VARCHAR 来最小化需要处理的数据行的存储总量和磁盘 I/O 是比较好的。
 
六:TEXT与BLOB
TEXT 或者BLOB,二者之间的主要差别是BLOB 能用来保存二进制数据,比如照片;而TEXT 只能保存字符数据
BLOB 和TEXT 值会引起一些性能问题,特别是在执行了大量的删除操作时。
删除操作会在数据表中留下很大的“空洞”,以后填入这些“空洞”的记录在插入的性能上会有影响。为了提高性能,建议定期使用OPTIMIZE TABLE 功能对这类表进行碎片整理,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

推荐阅读