博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql选择合适的数据类型
阅读量:7238 次
发布时间:2019-06-29

本文共 1147 字,大约阅读时间需要 3 分钟。

char和varchar

一般情况下,由于char是固定长度的,所以它的处理速度比varchar要快的多,但是器缺点是浪费存储空间,程序需要对行尾空格进行处理,所以对于那些长度变化不大并且对查询速度有较高要求的诗句可以考虑使用char类型存储。

Mysql中不同引擎对varchar和插入的使用原则:

Myisam:使用固定长度

Memory:不管设定是varchar还是char,最后都是char来处理。

Innodb: 使用varchar。Innodb内部没有区分两者的区别,所有的数据行都是使用指向数据列值的头指针。因此存储空间才是主要的问题,所以使用varchar更加省空间和减缓I/O。

 

text和blob:

两者都是用来存储大的字符串。text存储文本字符串,blob用于存储二进制的字符串,比如图片。

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 * 这种操作返回更少的数据量,减少网络开销。

float和decimal:

用于存储带有小数的数据类型。

浮点数存在误差的问题,四舍五入

与钱有关等对精度敏感的数据,应当使用定点数decimal来表示。

编程中也要考虑浮点数带来的问题。尽量避免做浮点数的比较

日期类型:date、time、datetime、timestamp

根据需求,选择占用空间最少的类型存储。

记录年月日时分秒且记录的年份比较久远,那么使用DATETIME,而不使用TIMESTAMP,因为TIMESTAMP能记录日期的日期范围比TIMESTAMP小。

如果记录时间要随着用户不同的时区做相应的变化时,选择TIMESTAMP

转载于:https://www.cnblogs.com/wxl-dede/p/5015827.html

你可能感兴趣的文章
linux下ssh/sftp配置和权限设置
查看>>
js面向对象编程两个主要点
查看>>
Xml通用操作类
查看>>
CSS常见以及解决兼容办法
查看>>
含参数的二次不等式的解法【中级和高阶辅导】
查看>>
Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述
查看>>
利用border-radious画图形
查看>>
Java并发编程(二)同步
查看>>
linux下top命令查看cpu占用情况
查看>>
jenkins+maven+junit构建自动化测试,整合junit xml生成直观的测试报告[留存]
查看>>
ol,ul,dl,table标签的基本语法
查看>>
bzoj4197
查看>>
又是每周作业~4.1
查看>>
理解项目编辑器---part1:创建项目编辑器
查看>>
iOS所有常见证书,appID,Provisioning Profiles配置说明及制作图文教程
查看>>
hibernate--一对多单向关联 (重点!!!)
查看>>
[Union]C++中Union学习笔记
查看>>
python面向对象三大特征
查看>>
iOS - SQLite 数据库存储
查看>>
线程、任务和同步学习笔记(五)
查看>>