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数据类型选择的更多相关文章

  1. 谈谈如何选择合适的MySQL数据类型

    MySQL数据类型选择 一 .选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更 ...

  2. 如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  3. MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)

    殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...

  4. MySQL数据类型的选择

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据类型的选择时间:2019年2月22日内容:MySQL数据类型的选择范式参考重点:主要讲述MyS ...

  5. Mysql 数据类型及选择原则

    MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 2 . 数据类型会影响 ...

  6. mysql数据库——选择优化的数据类型

    选择更小的数据类型:一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少.但是要确保没有低估需要存储的 ...

  7. MySQL数据类型的最优选择

    MySQL数据类型的最优选择   慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下:            ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下)      ● 计算.进而 ...

  8. mysql 数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  9. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

随机推荐

  1. mybatis实现一对多连接查询

    问题:两个对象User和Score,它们之间的关系为一对多. 底层数据库为postgresql,ORM框架为mybatis. 关键代码如下: mybatis配置文件如下: mybatis.xml文件内 ...

  2. Linux初学时的一些常用命令(4)

    1. 磁盘 查看当前磁盘使用情况 df -h 查看某个文件大小 du -sh 文件名 如果不输入文件名,默认是当前目录的所有文件之和,即当前目录大小 2. 系统内存 free 参数详解:https:/ ...

  3. Java中的IO流(一)

    一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...

  4. linux安装Anconda

    1.下载 wget https://repo.anaconda.com/archive/Anaconda3-2018.12-Linux-x86_64.sh sh Anaconda3-2018.12-L ...

  5. python教程_1

    1.2 不同应用领域的主流操作系统 (1)桌面操作系统 (2)服务器操作系统 (3)嵌入式操作系统 (4)移动设备操作系统 1>.桌面操作系统: Windows系列(微软的.net开发) 用户群 ...

  6. yum更换阿里源

    备份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载新的CentOS-Base.repo ...

  7. 第十一章 串 (a)ADT

  8. ubuntu下java的安装即使用

    1.首先在官方网站(点击可以下载)下载最新的JDK,要选用self extracting installer 2.在/usr/下新建java目录,把下载的文件放到这个目录下 sudo mkdir /u ...

  9. codeforces 722D Generating Sets 【优先队列】

    You are given a set Y of n distinct positive integers y1, y2, ..., yn. Set X of n distinct positive ...

  10. PAT1135(红黑书的判定)

    There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...