MySQL使用适合的列
电脑版发表于:2020/5/25 22:45
前言:在项目开发中设计的表结构和索引不佳会造成大量的性能、空间资源浪费。
我们要提高性能,需要考虑的因素:
1、设计架构
2、设计索引
3、评估查询性能
在项目开发中数据库的设计很重要,特别列所选的数据类型
通常越小越小:使用小的数据类型,——更少的磁盘空间,内存和CPU缓存。而且需要的CPU的周期也更少。
2.简单就好。 --很多“老铁”喜欢花里胡哨,切杀鸡不要用宰牛刀。
整数代价小于字符。——因为字符集和排序规则使字符比较更复杂
3.尽量避免NULL——如果计划对列进行索引,尽量避免把列设置为NULL
尽可能把字段定义为NOT NULL。——可以放置一个默认值,如‘’,0,特殊字符串。
why:
(1)MYSQL难以优化NULL列。NULL列会使索引,索引统计和值更加复杂。
(2)NULL列需要更多的存储空间,还需要在MYSQL内部进行特殊处理。
(3)NULL列加索引,每条记录都需要一个额外的字节,还导致MyISAM中固定大小的索引变成可变大小的索引。
类型选择的一些习惯:
第一步、大致决定数据类型。——判断是数字,字符串还是时间等。这通常很直观。
第二步、确定特定的类型。
很多数据类型能够保存同类型的数据,但是我们要发现,他们在存储的范围,精度和物理空间之间的差别(磁盘或内存空间)。如:datetime和timestamp能保存同样类型的数据:日期和时间。——timestamp使用datetime一半的空间;能保存时区;拥有特殊的自动更新能力。
整数:
1.存储类型——数据范围为-2^(n-1)到2^(n-1)-1,这里的n是所需存储空间的位数。
类型名称 | 占用位数 | 数据范围 |
TINYINT | 8 | -2^7 ~ 2^7-1 |
SMALLINT | 16 | -2^15~2^15-1 |
MEDIUMINT | 24 | -2^23~2^23-1 |
INT | 32 | -2^31~2^23-1 |
BIGINT | 64 | -2^63~2^63-1 |
3.MYSQL对整数类型定义宽度,比如int(1)和int(22)对于存储和计算是一样的。只规定了MYSQL的交互工具(如命令行客户端)用来显示字符的个数。