Schema与数据类型优化

选择优化的数据类型

1.更小的通常更好

更小的数据类型通常更快,因为它们占用更少的磁盘,内存和CPU缓存

2.简单就好

简单数据类型的操作通常需要更少的CPU周期.例如:整型比字符操作代价更低,因为字符集和校对规则使字符比较比整型比较更复杂

3.尽量避免NULL

通常情况下最好制定列为NOT NULL,除非真的需要存储NULL值.

如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列使得索引.索引统计和值比较都更复杂.可为NULL的列会使用更多的存储空间,在MySQL中也需要特殊处理

如果计划在列上建索引,就应该尽量避免设计成可为NULL的列

整数类型

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT.分别使用8,16,24,32,64为存储空间.

整数类型可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍.例如:TINYINT UNSIGNED可以存储的范围是0~255,而TINYINT的存储范围是-128~127

实数类型

DECIMAL类型用于存储精确的小数

DECIMAL类型允许最多65个数字

因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL,例如存储财务数据.但在数据量比较大的时候,可以考虑使用BIGINT替代DECIMAL,将需要存储的货币单位根据小数的位数乘以相应的倍数即可.这样可以同时避免浮点存储计算不精确和DECIMAL精确计算代价高的问题

字符串类型

VARCHAR

varchar类型用于存储可变长字符串,是最常见的字符串数据类型.它比定长类型更节省空间,因为它仅使用必要的空间

varchar需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节

下面这些情况下使用varchar是合适的:字符串列的最大长度比平均长度大很多;列的更新很少,所以碎片不是问题;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储

CHAR

char类型是定长的:MySQL总是根据定义的字符串长度分配足够的空间.char值会根据需要采用空格进行填充以方便比较.

char适合存储很短的字符串,或者所有值都接近同一个长度.例如:char非常适合存储密码的MD5值,因为这是一个定长的值.对于经常变更的数据,char也比varchar更好,因为定长的char类型不容易产生碎片.对于非常短的列,char比varchar在存储空间上也更有效率.

日期和时间类型

MySQL能存储的最小时间粒度为秒

DATETIME

这个类型能保存大范围的值,从1001年到9999年,精度为秒.使用8个字节的存储空间

TIMESTAMP

TIMESTAMP类型保存了从1970年1月1日午夜以来的秒数,只能显示1970年到2038年.默认值为not null

最新文章

  1. 轻量级前端MVVM框架avalon - ViewModel
  2. org.hibernate.exception.SQLGrammarException: could not execute query
  3. Wampserver 2.5 多站点配置方法
  4. http://www.cnblogs.com/zhaoguihua/tag/%E9%AB%98%E6%80%A7%E8%83%BD%E7%BD%91%E7%AB%99/
  5. ecshop如何判断缓存文件是否能更新
  6. Effective Java 40 Design method signatures carefully
  7. Intent Flag介绍 intent.addFlags()
  8. HDU1150Machine Schedule(二分图最大匹配的DFS解法)
  9. MySQL Limit order by
  10. UVa 658 (Dijkstra) It's not a Bug, it's a Feature!
  11. iOS8中添加的extensions总结(一)——今日扩展
  12. javascript笔记整理(运算符 )
  13. 解决Fiddler出现无线弹框 "creation of the root certificate was not successful”的问题
  14. Hyperledger Fabric 建立一个简单网络
  15. HBase笔记5(诊断)
  16. 剑指offer(53)表示数值的字符串
  17. redis可执行文件说明
  18. context configure and clock schedule
  19. [蓝桥杯]ALGO-51.算法训练_Torry的困惑(基本型)
  20. Jnlp

热门文章

  1. 基于cxf开发的WebService
  2. Mac上使用ssh连接服务器title显示服务器的ip
  3. 2018.12.1 万圣节的小L
  4. Hive入门(三)分桶
  5. POJ 2914:Minimum Cut(全局最小割Stoer-Wagner算法)
  6. NEUOJ 1702:撩妹全靠魅力值(CDQ分治三维偏序)
  7. python的列表使用
  8. 安卓学习资料推荐《深入理解Android:卷2》下载
  9. JVM(八):Java 对象模型
  10. Docker学习第一天