Mysql高性能学习笔记02

Mysql高性能学习笔记02

ID:37552562

大小:247.47 KB

页数:12页

时间:2019-05-25

Mysql高性能学习笔记02_第1页
Mysql高性能学习笔记02_第2页
Mysql高性能学习笔记02_第3页
Mysql高性能学习笔记02_第4页
Mysql高性能学习笔记02_第5页
资源描述:

《Mysql高性能学习笔记02》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Mysql高性能学习笔记2刘岩suhuanzheng7784877@163.comBlog:suhuanzheng7784877.iteye.com1.前言高性能Mysql中的第二章-基准测试和第三章-服务器性能剖析是需要全局考虑的问题,不同的应用场景,基准测试的方式和输入数据是不太一样的。所以我们后续再讨论这两个问题,先放过去,直接进行优化schema和数据类型的这一话题。2.优化数据类型优化数据类型,基本上是用在建表和修改表的场景上,整个优化数据类型这一话题说下来,基本上都是集中于:对于DB数据的高效存储和高效查询。在原生的Mysql中,数据类型大体

2、上分为以下几种:整数类型、实数类型、字符串类型、日期时间类型、位数类型、特殊类型。优化数据类型基本上参照以下几个原则:1):使用小类型的数据类型,能用int的别用long。小数据类型在磁盘寻址的时候占用更少的资源,也减少了CPU的运算时间,这样在iowait的时候就不会因为大字段而消耗过多资源。2):简单类型优先,这个就需要结合应用层语言的知识来阐述了,比如Java中的int类型和Integer类型,哪个更耗资源,答案肯定是Integer,在《Java代码优化》中就曾经提出过,使用原始类型表述属性值。在Mysql也是如此,能使用最简单的类型代表字段的,尽

3、量使用简单类型。这样更贴近于CPU原生支持的计算类型。比如使用整型存储时间戳;用整型存储IP地址;用整型存储货币浮点,在应用层,再用乘除法换算小数点的精度。3):不是必要时刻,不要使用NULL,让所有字段哪怕是有默认的值,也要非空。对于优化索引,如果字段是NULL,无法对其NULL进行索引排列。不过InnoDB对于NULL是做了特殊的bit位存储。13.整型类型Tinyint(8位)范围:无符号(0~256)、有符号(-128~127)场景:一般用于存储数字字典,常量表的id,因为数据量十分有限,又是常量表,所以可以用它存储Smallint(16位)范围

4、:无符号(0~65536)、有符号(-32768~32767)场景:Tinyint的替代品,若常量表数据比较多,比如中国的省-市-自治区-区县-村镇,到这个范围下,基本够用了。中国有65536个村镇(区县)吗?Mediumint(24位)范围:无符号(0~16777216)、有符号(-8388608~8388607)场景:1000w以内的数据,这个若是日志表,又是在一段时间内数据量可控,定时清理,Mediumint不失为是轻量级的int的一种id选择。Int(32位):大多数场景,一般Java的int也支持不了这么长的整数位!范围:无符号(0~42949

5、67296)、有符号(-2147483648~2147483647)场景:大多数的自增id场景,基本够用了。无符号40多亿数据,一般的中小型,互联网,基本够用。Bigint(64位)范围:天文数字,在Java中必须特殊处理该数字类型——BigDecimal进行处理。范围:无符号(0~18446744073709551616)、有符号(-922337203685478~922337203685477)。2场景:使用关系型数据库存储海量数据的id。千万大一位是亿,亿大一位是兆,兆在大一位是什么????不过数据量在这个范围,很难想象还用RDBMS进行管理。有符

6、号与无符号的最大区别就是是否支持负数。Unsigned一旦被选择上了,表示不允许负数,也就是存储无符号数。一般情况下无符号int类型的字段几乎可以满足系统要求了,就算是自增id类型。40多亿的mysql数据量也已经比较不小了。日交易量记录上千万比记录,一个月也就区区3亿记录。如果大于这个数量级的数据,又是实时数据,应该考虑分表分库。或者借助NoSQL,将数据量散列拆分开。扯远了,这里就是告诉大家,数值类型字段支持的范围。4.实数类型其实基本上也就是指含有小数的数,也就是浮点类型的数据类型。Float:4个字节存储Double:8个字节存储Decimal:

7、允许65个数字这里有位仁兄总结的浮点型和定点型计算的文章,很不错http://www.163ns.com/zixun/post/5226.html。基本上float可以用作百分比,有点误差没关系,double精确度比float大。而Decimal是完全金额类型计算。有的非敏感的,金额不是特别精确的系统业务场景,笔者也见过也有人使用double的。(你说那些不精确的,被四舍的钱都哪去了,都归谁了?100个人也就算了,如果涉及到1000w个人,每个人被四舍了的几厘钱,甚至到分钱误差,加起来够买房子了吧?)存储以及计算消耗代价:Float

8、imal而原生的浮点类型,CPU可以直接参与计算,好像评价CPU的性能就是看待C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。