尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存。
简单数据类型的操作通常需要更少的CPU周期
1.整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂
2.使用MySQL自建类型而不是字符串来存储日期和时间
3.用整型存储IP地址,用INET_ATON()和INET_NTOA()函数在这两种表示方法之间转换,select inet_aton(‘1.1.1.1’),select inet_ntoa(16843009)
官方说MyISAM,InnoDB,MEMORY可以为NULL字段加上索引,经测试索引生效,not null 比 null性能稍好;但是由于null对优化器影响较大,所以应该尽量避免设计成default null
类型 | 存储占用长度 |
---|---|
TINYINT | 8 |
SMALLINT | 16 |
MEDIUMINT | 24 |
INT | 32 |
BIGINT | 64 |
最大长度 | 末尾去空格 | 场景 | |
---|---|---|---|
VARCHAR | 没有限制 | false | 1、存储长度波动较大的数据2、字符串很少更新的场景3、适合保存多字节字符 |
CHAR | 255 | true | 1、存储长度波动不大的数据2、存储短字符串、经常更新的字符串 |
BLOB | TEXT | |
---|---|---|
存储方式 | 二进制 | 字符串 |
应用 | 图像、音视频 | text类型文档、小说 |
是否外部存储 | 值太大时 | 值太大时 |
date | timestamp | datetime | |
---|---|---|---|
占用空间 | 3字节 | 4字节 | 8字节 |
精确 | 日期 | 秒 | 毫秒 |
1.纯拉丁字符能表示的内容,没必要选择 latin1 之外的其他字符编码,因为这会节省大量的存储空间。
2.如果我们可以确定不需要存放多种语言,就没必要非得使用UTF8或者其他UNICODE字符类型,这回造成大量的存储空间浪费。
3.MySQL的数据类型可以精确到字段,所以当我们需要大型数据库中存放多字节数据的时候,可以通过对不同表不同字段使用不同的数据类型来较大程度减小数据存储量,进而降低 IO 操作次数并提高缓存命中率。