小蚂蚁学习mysql性能优化(7)--数据库结构优化--选择合适的数据类型

关于SQL以及索引优化的部分终于学习完了,今天开始进入第二层次的学习,数据库的结构优化,第一部分,选择合适的数据类型。

数据类型的选择,重点在于合适二字。

1.    使用可以存下数据的最小的数据类型

比如,一个时间类型的一个数据,可以使用varchar,可以使用datetime,还可以使用int,如何选择,就看哪一种类型对我们来说是最小的,不言而喻,int类型相对来说是最小的数据类型。

2.    使用简单的数据类型。

int类型要比varchar类型在mysql处理上简单的多,用int类型来存储时间是一个非常好的选择。

3.    尽可能的使用not null来定义字段。

这是因为innodb的一些特性所决定的,对于一些为null的字段,他可能需要一些额外的字段来进行存储,同时也会增加IO和存储的开销,所以在进行表结构设计的时候,尽量把每一个字段设计成not null,并且给出一个默认值。

4.    尽量少的使用一些大的类型,比如:text类型

如果非用不可的情况下,最好把这些字段单独提出来,存在一张附加表之中,一方面增加了主表的查询效率,另一方面在需要的时候对附加表进行这种大数据的查询。

使用int类型来存储时间,利用FROM_UNIXTIME()和UNIX_TIMESTAMP()两个函数来进行转换。

如    FROM_UNIXTIME(1443922330,‘%Y-%m-%d’);    得到一个格式化的:年-月-日

UNIX_TIMESTAMP(‘2015-10-4‘);    得到一个时间戳

使用bigint类型来存储ip地址,利用INET_ATON(),INET_NTOA()两个函数来进行转换

如    INET_ATON(‘127.0.0.1‘)  返回一个整形

INET_NTOA(ip)        返回一个ip地址

存储ip地址除了使用varchar之外,还可以使用bigint类型存储,varchar来存储ip的话,大约需要15个字节,而bigint只需要8个字节,相差了7个字节,不要小看这7个字节,数据量很大的情况下,7个字节能给我们节省很大的存储空间,并且会给IO效率,内存带来很大的节约。能为重要的是,不仅仅在空间上有节约,在ip地址的对比上,也会有好处,因为整形对比要比varchar对比更简单,更高效。

时间: 2024-12-27 22:43:49

小蚂蚁学习mysql性能优化(7)--数据库结构优化--选择合适的数据类型的相关文章

mysql性能优化学习笔记(5)数据库结构优化

一.选择合适的数据类型    1.使用可存下数据的最小的数据类型    2.使用简单地数据类型,Int<varchar    3.尽可能使用not null定义字段    4.尽量少用text,非用不可最好分表    用Int存储日期时间    from_unixtime()可将Int类型的时间戳转换为时间格式    unix_timestamp()可将时间格式转换为Int类型    存储IP地址——bigInt    利用inet_aton(),inet_ntoa()转换 二.范式设计   

小蚂蚁学习mysql性能优化(完结)--硬件方面优化--CPU和DISK优化

数据库硬件方面优化 如何选择CPU? 是选择单核更快的CPU还是选择核数更多CPU? mysql有一些工作只能使用单核CPU mysql对CPU核数的支持并不是越多越快 建议:mysql5.5使用的服务器不要超过32核.还是建议单核频率更快的cpu. Disk IO优化 常用RAID级别简介 RAID0:也成为条带,就是把多个磁盘链接成一个硬盘使用,这个级别IO最好. RAID1:也成为镜像,要求至少有两个磁盘,每组磁盘存储的数据相同. RAID0+1:就是RAID1和RAID0的结合.同时具备

小蚂蚁学习mysql性能优化(1)--SQL以及索引优化

性能优化之mysql优化 可以从几个方面进行优化 硬件    系统配置    数据库表结构    SQL索引 成本从高到底,效果从低到高. 如何发现有问题的SQL? 使用mysql慢查询日志对有效率问题的sql进行监控. show variables like 'slow_query.log'; set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log';//日志存放的位置 set global log_queries_

Mysql性能优化----SQL语句优化、索引优化、数据库结构优化、系统配置优化、服务器硬件优化

一.SQL语句优化 1-1.MySQL慢日志 1).慢日志开启方式和存储格式 如何发现有问题的SQL? 使用Mysql慢日志对有效率问题的SQL进行监控 前期准备 mysql> show variables like '%log_queri%'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | log_queries_no

小蚂蚁学习mysql性能优化(3)--SQL以及索引优化--慢查日志分析工具和explain说明

昨天在测试操作数据库的时候碰到两个问题忘了记录下来,今天补充上去,接上篇 1. 安装测试数据库sakila时报错.Mysql server has gone away的问题.解决方法: 查看    show global variables like 'max_allowed_packet'; 一般来说会显示    max_allowed_packet    1048576 修改为    set global max_allowed_packet    =    1024*1024*16;   

小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法

max()的优化 例如:explain select max(`payment_date`)  from payment; 可以查看到row的行数非常的多,也就是说扫描了整张表. 为payment_date加上一个索引. create index idx_payment on payment (`payment_date`); 执行sql语句    explain select max(`payment_date`) from payment order by payment_date; 可以看

MySQL之数据库结构优化

1.选择合适的数据类型 一.选择能够存下数据类型最小的数据类型 二.可以使用简单的数据类型.int  要比varchar在MySQL处理上简单 三.尽可能的使用not null  定义字段 四.尽量少用txt类型,非用不可时考虑分表. 五.举例: 使用int类型存储日期时间,利用FROM_UNIXTIME(),UNIX_TIMESEAMP()两个函数转换 mysql> SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S'); +--------

《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化

4-1 数据库结构优化介绍 良好的数据库逻辑设计和物理设计是数据库获得高性能的基础. 1.减少不必要的数据冗余. 2.尽量避免数据维护中出现更新,插入和删除异常. 插入异常:如果表中的某个实体随着另一个实体而存在.   更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新. 删除异常:如果删除表中的某一实体则会导致其他实体的消失. 3.节约数据存储空间 4.提高查询效率 show create table selectcourse\G select * from selectcour

百万级数据库优化方案数据库SQL优化大总结

一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注.描述.评论之类的可以设置为 NULL,其他的,最好不要使用NULL. 不要以为 NULL 不需要空间,