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

MySQL Schema与数据类型优化的更多相关文章

  1. MySQL Schema 与数据类型优化

    良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计schema,这往往需要权衡各种因素. 例如,反范式的设计可以加快某些类型的查询,但同时可能使另一些类型的查询变慢:添加计数 ...

  2. mysql笔记01 MySQL架构与历史、Schema与数据类型优化

    MySQL架构与历史 1. MySQL架构推荐参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2397536.html 2. MySQL会解 ...

  3. Schema 与数据类型优化

    这是<高性能 MySQL(第三版)>第四章<Schema 与数据类型优化>的读书笔记. 1. 选择优化的数据类型 数据类型的选择原则: 越小越好:选择满足需求的最小类型.注意, ...

  4. 高性能MySQL笔记 第4章 Schema与数据类型优化

    4.1 选择优化的数据类型   通用原则   更小的通常更好   前提是要确保没有低估需要存储的值范围:因为它占用更少的磁盘.内存.CPU缓存,并且处理时需要的CPU周期也更少.   简单就好   简 ...

  5. MySQL Schema与数据类型的优化

    选择优化的数据类型: 1. 更小的通常更好: 一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为他们占用更少的磁盘,内存和cpu缓存,并且处理时需要的cpu周期也更少 ...

  6. MySQL之Schema与数据类型优化

    选择优化的数据类型 MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要.不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择: 更小的通常更好一般情况下,应该尽量使用 ...

  7. MySQL设计之Schema与数据类型优化

    一.数据类型优化 1.更小通常更好 应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要 ...

  8. Schema与数据类型优化

    良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询数据来设计schema,这往往需要权衡各种因素. MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要. 更小的通 ...

  9. Mysql高性能笔记(一):Schema与数据类型优化

    1.数据类型 1.1.几个参考优化原则 a.  更小的通常更好 i.更小的数据类型,占用更少磁盘.内存和CPU缓存,需要的CPU周期更少 ii.如果无法确定哪个数据类型是最好的,就选择不会超过范围的最 ...

随机推荐

  1. MAC iterm2 常用快捷键大全

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 / command + 左右方向键 切换全屏:command + enter 查找:com ...

  2. 设计模式-观察者模式(Observer)

    观察者模式是行为模式的一种,它的作用是当一个对象的状态发生变化时,能够自动通知关联对象,自动刷新对象状态. 观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步. ...

  3. os.path.join用法

    os.path.join()函数:连接两个或更多的路径名组件 1.如果各组件名首字母不包含’/’,则函数会自动加上 2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃 3.如果最后一个组 ...

  4. c++稍微复杂桶排序(未完待续~)

    由于上次的桶排序占用空间太多,这次又有了一个新的办法 直接上代码: #include <bits/stdc++.h> using namespace std; int n; void bu ...

  5. Minimum Spanning Tree

    前言 说到最小生成树(Minimum Spanning Tree),首先要对以下的图论概念有所了解. 图 图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象.图的定义方式有两种 ...

  6. 数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 考虑到微信公众 ...

  7. python 的一些小项目

    1.在线教育平台(视频播放) 2.仿微信网页版(语音.视频.文字聊天) 3.高德API + Python 解决租房问题 4.仿知乎 5.Django打造文件分享系统.文件管理.搜索引擎(仿云盘) 6. ...

  8. 计算机组成原理第五章(中央处理器CPU)

    ---恢复内容开始--- 指令周期(取指令.分析指令到执行完该指令所需的全部时间) 机器周期通常又称CPU周期 通常把一条指令周期分成若干个机器周期,每个机器周期完成一个基本操作 以主存的工作周期(存 ...

  9. Java编程思想:I/O的典型使用方式

    import java.io.*; public class Test { public static void main(String[] args) { // BufferedInputFile. ...

  10. 基于百度EasyDL定制化图像识别平台的海洋鱼类识别方法

    [目的]鱼类识别对渔业资源的开发利用有着重要的意义.针对海底环境恶劣.拍摄环境亮度低.场景模糊的实际情况导致海底观测视频品质差,视频中的鱼类识别难的问题以及现有鱼类识别方法存在的鱼类标注数据集过少导致 ...