8.Mysql数据类型选择
8.选择合适的数据类型
8.1 CHAR与VARCHAR
CHAR固定长度的字符类型,char(n) 当输入长度不足n时将用空格补齐,char(n)占用n个字节,CHAR类型输出时会截断尾部的空格,即使是数据值尾部的空格也将会被截断。CHAR处理速度要快于VARCHAR。
VARCHAR可变长度的字符类型,varchar(n) 当输入长度不足n时不用补齐,varchar(n)占用实际长度+1个字节,+1个字节是因为VARCHAR值后需要加一个字符串结尾符。VARCHAR类型输出时会截断字符串结尾符。
不同存储引擎下CHAR与VARCHAR的选择:
MyISAM存储引擎建议使用CHAR;
MEMORY存储引擎使用固定长度的数据行存储,即使列定义为VARCHAR也会被作为CHAR处理;
InnoDB存储引擎建议使用VARCHAR,所有行都有头部指针。
8.2 TEXT和BLOB
TEXT和BLOB用于保存大文本,其中:TEXT类型用来保存字符数据,BLOB类型用来保存二进制数据。
TEXT和BLOB的性能考虑:
1.optimize table
在删除数据后或者将数据由大改小后,数据将被删除,但空间并不会释放,这些在表的数据文件内未释放的空间称为碎片,碎片对表的性能会产生影响。
optimize table命令可以整理磁盘空间,并释放碎片。
例子:
create table test10 (id varchar(100),content text);
insert into test10 values ('1',repeat('abc',100)); -- repeat()函数是循环
insert into test10 values ('2',repeat('bcd',100));
insert into test10 values ('3',repeat('cde',100));
-- 查看数据文件 C:\Program Files\MySQL\Data\Data\scott\test10.ibd 96k
delete from test10 where id=1;
-- 查看数据文件
optimize table test10; -- 'Table does not support optimize, doing recreate + analyze instead'
-- 查看数据文件
2.合成索引
使用合成索引来提高大文本字段的查询性能。
合成索引是指根据大文本字段的内容建立一个散列值,并单独存储散列值,以散列值来查询数据行。
注意:只能用于散列值的精确匹配,不能用于范围匹配。
可以生成散列值的函数包括md5(),sha1(),crc32()等。
例子:
create table test11(id varchar(100),context blob,hash_value varchar(40));
insert into test11 values (1,repeat('beijing',100),md5(context));
insert into test11 values (2,repeat('shanghai',100),md5(context));
insert into test11 values (3,repeat('guangzhou',100),md5(context));
select * from test11;
explain select * from test11 where hash_value=md5(repeat('guangzhou',100));
3.前缀索引
-- 对context列前100个字符建立索引
create index idx_blob on test11(context(100));
-- 查看执行计划,前缀索引被查询使用
explain select * from test11 where context like 'guangzhou%';
4.避免select *
如果不需要返回TEXT和BLOB列时,则避免使用select *,以减少网络传输的数据量。
5.将TEXT和BLOB列拆表
把TEXT和BLOB列分离到单独的表中,适用于对其他列使用频繁,对TEXT和BLOB列使用不频繁的情况下。
8.3 浮点数和定点数
浮点数用于存储含小数的数值,包括float和double,浮点数精度较低(float 6位,double 15位),超出有效位数将导致四舍五入。
定点数以字符串存储,数据类型为decimal(65,0~30),超出定义精度时,在SQLMode模式下会警告并四舍五入,在TRADITIONAL模式下报错无法插入。
精度要求较高时建议选择定点数decimal(65,0~30)。
8.4 日期类型选择
根据实际需要选择能够满足应用的最小存储的日期类型;
只存年,用year;
只存年月日,用date;
只存时分秒,用time;
存年月日时分秒,用datetime,
跨不同时区使用,用timestamp。
8.5 小结
8.Mysql数据类型选择的更多相关文章
- 谈谈如何选择合适的MySQL数据类型
MySQL数据类型选择 一 .选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更 ...
- 如何选择合适的MySQL数据类型
一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...
- MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)
殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...
- MySQL数据类型的选择
+++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据类型的选择时间:2019年2月22日内容:MySQL数据类型的选择范式参考重点:主要讲述MyS ...
- Mysql 数据类型及选择原则
MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 2 . 数据类型会影响 ...
- mysql数据库——选择优化的数据类型
选择更小的数据类型:一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少.但是要确保没有低估需要存储的 ...
- MySQL数据类型的最优选择
MySQL数据类型的最优选择 慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下: ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下) ● 计算.进而 ...
- mysql 数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) ...
- MySQL 数据类型 详解
MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...
随机推荐
- jQuery中事情的动态绑定
在jQuery的开发过程中,我们往往需要处理各种事件,例如click(),hover()等.在jQuery的API中,我们可以使用不同的方法来将这些事件绑定到特定的元素中.今天这篇文章中,我们将要介绍 ...
- ArcGIS案例学习笔记2_2_txtexcel空间可视化和空间插值
ArcGIS案例学习笔记2_2_txt/excel空间可视化和空间插值 计划时间:第二天下午 教程:pdf page=337 数据:chapter8/ex4 方法: 1.加载xy.txt和gdp.tx ...
- Pandas基础知识(一)
Pandas的主要结构有DataFrame和Series. 生成一个Series对象. 关于部分Series的索引操作. Series也可以通过字典生成. DataFrame是一个表格型的数据,它既有 ...
- java.net.NoRouteToHostException
1.之前一直默认的一个请求url,后来后台ip更换后,就报上述错误.网上好多方法说:关闭服务器端的防火墙,但试过没用. 问题有待重新测试解决
- oracle学习--循环语句
oracle学习--循环语句 loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...
- 如何将div中的内容设置为空同时还要保留div本身
将div的innerHTML置为空即可,下面有2类方法可以实现: 假设有如下的html片段: <div id="test">这是要删除的内容,还要保留test本身< ...
- java面试题:Spring
Spring 面试时,最好能结合底层代码说出IOC,AOP或Spring MVC的流程,能说出拦截器的底层. 如果看过Spring的源码,并能结合设计模式表达,是很大的加分项. IOC Q:讲一下IO ...
- CentOS ./configure && make && make install详解
码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). 在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INST ...
- SystemC_Basic
1.http://baike.baidu.com/view/1018980.htm 百度百科介绍的很好,举例很清晰. 2.SystemC的三个基本进程:SC_METHOD,SC_THREAD,SC_C ...
- HDU_1024.MaxSumPlusPlus(基础DP + 滚动数组优化讲解)
这道题打破了我常规的做题思路,因为这是我刚开始训练DP,感觉这道题目好晕眼呀,emm其实就是感觉自己是真的菜...... 为什么说打破了我的做题思路呢,因为我平时看题解都是在已经AC或者完全不懂的情况 ...