当数据库中的数据大量增加的时候,索引的效率就会降低。因此,通常的优化就是减少数据库中关键表的记录数目来提高性能。实际上,选择恰当的数据类型也可以减少系统I/O资源的消耗,而且能提高数据库操作中经常用到的比较运算的性能,从而提高数据库系统的性能。
数据库的类型优化的原理:
-
"小"的数据类型减少存储空间,使用查询时减少IO资源的消耗
-
通过合适的数据类型加快比较
根据数据库类型优化的原理,可以得出优化的基本原则:
-
数据类型通常越小越好
-
数据类型要相对简单,如整型比字符简单
-
尽可能不用null值(这个对性能的提升很有限,除非经分析null值的确引起了问题,否则不必刻意优化)
平常的数据库字段类型一般就是数字、日期时间和字符型
1. 整型
最常用的数据类型,分为有符号数和无符号数,它们的性能是一样的。
整数int在运算时一般会转化为64位的big int,一些聚合函数除外。
整型最优先考虑的类型。
IP一般保存成这个类型,mysql有inte_aton()和inet_ntoa() 在ip和整数之间进行转 换。
2. 实数
主要是DOUBLE,FLOAT,DECIMAL这三种
这三种数据类型都太不常用,浮点类型的运算依赖于底层平台。浮点数有精度问题,在一些对精度无要求的地方使用,当对于精度有要求的地方,往往依靠乘以一个固定系数来转换成为整型数据存放,而且可以解决精度问题,数据处理更高效。
DECIMAL可以保存比INT更大的整数,它的运算是mysql服务自身进行的,性能要差于浮点数,但是可以保存精确的数值,能保存金额等精确数字。但因为大多数情况下,它也能转化成整型存储,所以用得不太多。
3. 字符
VARCHAR类型是可变长的,它在更新的时候会引起额外的操作。而且根据不同的引擎处理这种行的长度可变的情况的方法是不一样的:MyISAM会拆开行,InnoDB则会进行分页。所以,使用VARCHAR类型的条件是:最大长度远远大于平均长度,而且很少更新。
CHAR在存储很短的字符串或者长度近似的字符串时很有用。例如用户的密码的md5值。对于经常修改的,也要优先考虑char类型。
BLOB和TEXT
在进行排序的时候,MEMORY表是不支持这两个类型的,所以,尽量使用order by substring(col,length)进行排序,不要直接order by,否则系统将会建立MyISAM的临时表,存储在外存,而且系统开销很大。
注意BLOB和TEXT还要受到客户端与服务器端的网络通信缓冲区最大值的限制。
3. TIMESTAMP和DATETIME
TIMESTAMP表示的时间范围比DATETIME小一些,如果在这个时间范围内,尽量用TIMESTAMP,因为它占空间更小一些。
4. BIT类型
尽量避免,如果要保存多组true/false的值,可以使用整型,用每一位表示true或false,用位操作来进行存取。
主键类型的选择
推荐使用整型,性能较好,可以使用auto_increment,最好不要用字符做主键,尤其是MyISAM。
分享到:
相关推荐
MySQL常见数据类型——数值型1
33_01_MySQL系列之五——MySQL数据类型及sql模型笔记存储引擎也被称为表类型.不支持事务支持表锁.frm 表结构定义文件.MYD 表数据文件支持事
JDBC数据类型与数据库字段对应表——mysql篇 数值型 整型 JDBC tinyint java.lang.Integer smallint mediumint java.lang.Long int bigint java.math.BigInteger
《MySQL常见数据类型:字符型》文章出自教学视频《尚硅谷MySQL核心技术178讲》美女老师之手,行文简洁优雅,信息量大。
birth列则使用DATE数据类型。 创建了一个表后,我们可以看看刚才做的结果,用SHOW TABLES显示数据库中有哪些表: mysql> SHOW TABLES; +---------------------+ | Tables in menagerie | +-------------------...
理解 —— MySQL支持的数据类型; 表的字段类型 MySQL支持的类型 MySQL支持多种类型,大致可以分为三类: 数值类型 日期和时间类型 字符串(字符)类型。 数值类型 表的字段类型 MySQL支持所有标准SQL数值数据类型。 ...
mybatis中操作json类型数据(csdn)————程序
第5讲 数据类型和运算符 第6讲 MySQL函数 第7讲 查询数据 第8讲 插入、更新与删除数据 第9讲 索 引 第10讲 存储过程和函数 第11讲 视 图 第12讲 MySQL触发器 第13讲 MySQL权限与安全管理 第14讲 数据备份与恢复 第15...
JDBC数据类型与数据库字段对应表——mysql篇
【作 用】: mysql数据库操作类 【作 者】: Riyan 【版 本】: version 2.0 【修改日期】: 2010/02/11 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※ **/ class ...
JAVA8时间插入mysql少了8小时的解决办法(csdn)————程序
show full columns from tb查看 MySQL 数据列(column)的字符集。 show charset查看当前安装的 MySQL 所支持的字符集 length计算字节长度 CHAR_LENGTH计算字符串长度 COMPRESS压缩字符串 UNCOMPRESS解压字符串 ...
mysql不支持innodb不支持fulltext索引的类型innodb不保存具体行数innodb的auto_increment不支持联合索引innodb删除表的时候是一行行删除——————————————————————————–大型网站对于数据库...
3,数据类型 3.1,整型 3.2,浮点型 3.3,字符型 3.4,日期型 4,约束 4.1,什么是约束 4.2,NOT NULL 约束 4.3,UNIQUE 约束 4.4,PRIMARY KEY 约束 4.5,FOREIGN KEY 约束 5,事务 5.1,什么是约束 5.2,事务的...
慢查询日志(slow query log):记录执行时间超过指定阈值的查询,帮助识别和优化性能瓶颈。 应用场景 MySQL广泛应用于各种规模和类型的项目,包括但不限于: Web应用程序:作为众多网站和Web服务(如电子商务...
嗯,接上一章数据库的基本操作后,这篇是基于数据表的基本操作,我们将数据库建立好后,就有创建...字段名1,数据类型[完整约束条件], 字段名2,数据类型[完整约束条件], 字段名3,数据类型[完整约束条件] ); 这样咱
理解 —— 三种数据模型的类型。 数据模型的应用层次 数据模型 Data Model,使对现实世界数据特征的抽象,是数据系统中用以提供信息表示和操作手段的形式构架。 数据模型的应用层次 应用层次 概念模型(信息世界) ...
日期类型 存储空间 日期格式 日期范围 ———— ——— ——————— —————————————– datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp 4 ...