沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!
选择优化的数据类型:
整数类型:
1、 更小的平日更好:
一般情况下,应当尽量应用可以精确存储数据的最小数据类型。更小的数据类型平日更快,因为他们占用更少的磁盘,内存和cpu缓存,并且处理时须要的cpu周期也更少。
2、 简单就好
简单的数据类型操作平日须要更少的cpu周期。例如,整型比字符操作价值更低,因为字符集和校订规矩(排序规矩)使字符比较比整型加倍复杂。注:应应用mysql内建的类型存储时光和日期,而不是字符串。
如不雅萌芽中包含可为null的列,对Mysql来说更难优化,因为可为null的列使得索引、索引统计和值都比较复杂。可为null的列会应用更多的存储空间,在mysql中也须要特别处理。当可为null的列被索引时,每个索引记录须要一个额外的字节。
平日把可为null的列改为not null带来的机能晋升比较小。在调优时,没有须要起首在现有的shema中查找并修改掉履┞封个情况,除非肯定则会导致问题。然则如不雅列上建索引,就应尽量避免设计成可为null的列。
整数类型有可选的UNSIGNED属性,表示不许可负值,这大年夜致可所以正数的上限进步一倍。例如TINYINT UNSIGNED可以存储典范围是0~255,而TINYINT的存储范围是-128~127。
实数类型:
实数是带有小数部分的数字。然后,他们不仅仅为了存储小数部分;也可以应用DECIMAL存储比BITINT还大年夜的┞符数。MYSQL既支撑精确类型,也支撑不精确类型。
DECIMAL类型用于存储精确的小数,因为double类型和float类型在进行计算时,会因为精度损掉导致一些数据的误差。然则DECIMAL数据类型cpu不支撑对其直接计算,cpu直接支撑原生浮点计算,所以浮点运算明显更快。
因为须要额外的空间和计算开销,所以应当尽量只在对小数进行精确计算时才应用DECIMAL-例如存储财务数据。然则在数据量比较大年夜的时刻,可以推敲应用BITINT代替DECIMAL,将须要存储的泉币单位根据小数的位数乘以响应的倍数即可。
Varchar类型用于存储可变长字符串,是最常见的字符串类型。他比定长类型更节俭空间,因为它仅应用须要的空间(例如,越短的字符串应用越少的空间)。所以,varchar节俭了存储空间,对机能也有赞助。然则,因为行是边长的,在update是可能使行变得比本来更长,这就导致须要做额外的操作。如不雅一个行占用的空间增长,并且页内没有更多的空存放储。MyISAM会将行拆成不合的片段存储,InnoDB则须要决裂页来使行可以放进页内。
注:InnoDB加倍灵活,它可以把过长的varchar存储为BLOB。
- Char类型:
3、 尽量避免null
Char类型合适存储很短的字符串,或者所有值都接近同一个长度。例如,char类型异常合适存储暗码的md5值,因为他是定长的值。还有效户的身份证号以及手机号码。对于经常变革的数据,char也比vachar更好,因为定长的char类型不轻易产生碎片。对于异常短的列,char也比varchar在存储空间上更有效力。例如用char(1)存储Y和N的值,如不雅采取单字节字符集只须要一个字节,然则varchar(1)却须要两个字节,因为还有一个记录长度的额外字节。
Varchar(5)和varchar(200)存储‘hello’时空间开销是一样的,然则Varchar(5)会有很大年夜的优势,因为更长的列会消费更多的内存,因为Mysql平日会分派固定带下的内存块来保存内部值。尤其是应用内存临时表进行排序和操作时会特别糟糕。在应用磁盘临时表进行排序时也同样糟糕。
时光类型
DateTime和TimeStamp
- DateTime
这个类型能保存大年夜范围的值,大年夜1001年到9999年,精度为秒。它把日期和时光封装到格局为YYYYMMDDHHMMSS的┞符数里,与时区无关。应用8个字节的存储空间。
- TimeStamp:
存储1970年1月1日午夜以来的描述,他和Unix时光崔鸬铂。TimeStamp只应用4个字节的存储空间,是以它典范围比DateTime小的多;只能表示大年夜1970年到2038年。
字符串类型(varchar和char)
- Varchar:
TimeStamp显示的值也依附于时区。Mysql办事器,操作体系,以及客户端连接都有时区设置。
TimeStamp也有DATETIME没有的特别属性。默认情况下,如不雅插入时没有指定第一个TimeStamp列的值,Mysql会设置这个列的值为当前时光。在插入一行记录时,Mysql默认也会更新第一个TimeStamp列的插入和更新操作。最后,TimeStamp列默认为not null,这也和其他的数据类型不一样。
整数类型有TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别应用8,16,24,32,64位存储空间。他们可以存储的值典范围大年夜-2的(n-1)次方到2的(n-1)次方-1,个中n是存储空间的位数。
【编辑推荐】
- 浅谈MySQL数据库的Web安然问题
- 若何排查MySQL履行逝世锁原因
- 若何大年夜MongoDB迁徙到MySQL?这有现成经验!
- 玩抓MYSQL数据库!SQL敕令大年夜全!
- 对MySQL数据库复制中断的处理
推荐阅读
据悉,谷歌宣布的量子软件是一款开放源代码软件,用户可以免费应用,例如化学家及材料学家可以经由过程谷歌软件改编算法和方程,令其可以在量子计算机上运行。此外,谷歌以及IBM、英特尔、微软和D-Wave也在大年夜力推>>>详细阅读
本文标题:MySQL Schema与数据类型的优化
地址:http://www.17bianji.com/lsqh/38142.html
1/2 1