MySQL数据类型注意事项
2015-12-04 15:28
561 查看
1. TEXT和BLOB
区别:blob可以保存二进制数据,比如图片和音乐。而text只可以保存字符数据。
使用text和blob时,在进行大量的删除操作时,会在数据表中留下很大的空洞。建议定期使用OPTIMIZE TABLE功能对这类表进行碎片整理。
可以使用合成的索引来提高大文本字段(text和blob)的查询性能。
合成索引:添加一个列,用MD5()函数生成散列值,用散列值标识符查找速度会提高很多。但是只可以用于精度匹配,减少I/O,提高效率。
例子
创建表
create table test(id varchar(100),context blog, hash_value varchar(40));
插入数据
insert into test values (1, repeat('shenzhen',2), md5(context))
查找
select from test where hash_value=md5(repeat('shenzhen',2));
如需要进行模糊,则提供了前缀索引
create index idx_blob on test(context(100));
模糊查询
select * from test where context like 'shenzhen%'
注意%不能放前面,否则索引不会被使用
2. 浮点数和定点数应用要考虑的原则
1.浮点数存在误差。
2.对货币等对精度敏感的数据,要用定点数表示或存储。
3.在编程中,如果用到浮点数,要特别注意误差问题,尽量避免浮点数的比较。
4.注意浮点数中的一些特殊值的处理。
区别:blob可以保存二进制数据,比如图片和音乐。而text只可以保存字符数据。
使用text和blob时,在进行大量的删除操作时,会在数据表中留下很大的空洞。建议定期使用OPTIMIZE TABLE功能对这类表进行碎片整理。
可以使用合成的索引来提高大文本字段(text和blob)的查询性能。
合成索引:添加一个列,用MD5()函数生成散列值,用散列值标识符查找速度会提高很多。但是只可以用于精度匹配,减少I/O,提高效率。
例子
创建表
create table test(id varchar(100),context blog, hash_value varchar(40));
插入数据
insert into test values (1, repeat('shenzhen',2), md5(context))
查找
select from test where hash_value=md5(repeat('shenzhen',2));
如需要进行模糊,则提供了前缀索引
create index idx_blob on test(context(100));
模糊查询
select * from test where context like 'shenzhen%'
注意%不能放前面,否则索引不会被使用
2. 浮点数和定点数应用要考虑的原则
1.浮点数存在误差。
2.对货币等对精度敏感的数据,要用定点数表示或存储。
3.在编程中,如果用到浮点数,要特别注意误差问题,尽量避免浮点数的比较。
4.注意浮点数中的一些特殊值的处理。
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜