Mysql中不同引擎对varchar和插入的使用原则:
Myisam:使用固定长度
Memory:不管设定是varchar还是char,最后都是char来处理。
Innodb: 使用varchar。Innodb内部没有区分两者的区别,所有的数据行都是使用指向数据列值的头指针。因此存储空间才是主要的问题,所以使用varchar更加省空间和减缓I/O。
?
blob和text引起的性能问题:特别是在大量执行删除操作时。
删除操作会在数据表中留下很大的"空洞",以后填写这些"空洞"的记录在插入性能上会有影响。事实上,删除操作,只是在表中清空了记录,但是数据库的存储文件依然没有变小。为了提示性能,要定期的使用OPTIMIZE TABLE 进行碎片整理。
使用合成的索引值,即利用某个column的md5等算法生成索引,提示大文本的查询速度
这种查询,只适用于精确的查询。
比如:使用cotent的md5值作为索引
create table t (id int(4), content text, hash_val varchar(40));
insert into t values(1,repeat(‘wxl‘,200),md5(content));
select * from t where hash_val=md5(repeat(‘wxl‘,200));
把大文本单独存在一张表里;
减少主表的碎片,可以使select * 这种操作返回更少的数据量,减少网络开销。
浮点数存在误差的问题,四舍五入
与钱有关等对精度敏感的数据,应当使用定点数decimal来表示。
编程中也要考虑浮点数带来的问题。尽量避免做浮点数的比较
根据需求,选择占用空间最少的类型存储。
记录年月日时分秒且记录的年份比较久远,那么使用DATETIME,而不使用TIMESTAMP,因为TIMESTAMP能记录日期的日期范围比TIMESTAMP小。
如果记录时间要随着用户不同的时区做相应的变化时,选择TIMESTAMP
原文:http://www.cnblogs.com/wxl-dede/p/5015827.html