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. 一个关于EasyUI超恶心的BUG。。。Cannot read property 'options' of undefined

    控制台Console抛出的异常: jquery.easyui.min.js:9148 Uncaught TypeError: Cannot read property 'options' of und ...

  2. JAVAWEB 一一 userweb2(升级,servlet版,jstl和el)

    创建数据库和表 首先,创建一个web项目 然后引入jar包(jstl.jar和standard.jar是jstl和el包,在jsp页面中需要手动加 <%@ taglib uri="ht ...

  3. overload重载

    方法的重载 /** * 重载 overload * @author Administrator *同一个类,同一个方法 *不同:参数列表不同(类型,个数,顺序) 只和 参数列表有关 * 跟 返回值 和 ...

  4. iOS 两个页面之间的跳转

    -------->-------->-------->-------->-------->-------->-------->   以上完成页面one跳到页面 ...

  5. poj1061-青蛙的约会-(贝祖定理+扩展欧几里得定理+同余定理)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:132162   Accepted: 29199 Descripti ...

  6. 初识C语言中的函数(男神翁凯老师MOOC)

    什么是函数? 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值. 可以先想象成数学中的函数: y=f(x) 例如 求begin到end和的函数定义 void sum(int begi ...

  7. 自动化运维工具Ansible的部署步骤详解

    本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...

  8. java和c#中String

    java中: c#中: 1.拼接字符串 sql语句中 in() str="'001','002','003'";至于产生string就这样  str1="'001'&qu ...

  9. 如何正确获取MYSQL的ADO连接字符串

    首先你正确安装了MYSQL的数据库驱动程序(mysql-connector-odbc-5.3.2-win32.msi )http://dev.mysql.com/downloads/connector ...

  10. zabbix 自定义监控 排除带报错提示

    UserParameter=lq_data_sqoop,/usr/local/bin/sqoop.sh  2>/dev/null |awk '{print $2}' 注意:2>/dev/n ...