高性能Mysql总结一

数据类型的优化

原则:
      1,在满足业务需求的情况下最大限度的选择最小的数据类型
                           原因:IO占用减小,缓存减小,操作数据效率会有所提高。
      2,最好选用Mysql自带的数据类型,而不是用程序相互之间的转换。例:日期我们有的用字符串来表示,最好用数据库里面的datetime,datestamp类型来进行存储。
      3,在进行索引创建的列中我们最好用not null来创建字段。

整数类型

 tinyint    -2^7    --2  ^7 -1
 smallint  -2^15    --2  ^15 -1
 mediumit   -2^23    --2  ^23 -1
 int          -2^31   --2  ^31   -1
 bigint      -2^63   --2  ^63-1
总结:
         我们通常创建字符串的时候我们会int(10),int(20)  我们创建的时候回控制类的范围,但是实际上他是不会的他都会以int的范围来作为一个范围的大小,所以我们创建整数列的时候我们最好还是用tinyint,smallint,mediumint,int,bigint来控制他的范围这样可以节约我们类存的空间可以不必要的浪费我们的资源。

Mysql小数存储类型

Decimal不是数据类型,他是一种数据格式,当我们用它来操作精度相关的浮点数据的时候他都会转化为double来进行操作。

decimal:是一个存储格式占用的空间比存储存储类型大
double:双精度浮点精度高占用8个字节
float:单精度浮点4个字节

decimal的使用场景:
        一般用于财务上货币的计算非常的适合decimal.

字符串类型

       char  :定长,我们存储例‘hello    ’ 的时候存储进去就会变成 ‘hello’  应为char类型会删除后面的空字符串。
                       适用于所有存储字符串长度差不多相同的请款下比如  MD5  uuid的存储等
       varchar: 可变长度的字符串  使用与存储有很多的字符串的长度都不相同的情况下。
                       注意:当我们使用varhhcard的时候一定不要设置  row_fformat=fixed  他会把所有可变长度的字符串变成定长的字符串

但是不是所有的引擎都是这样的Memory引擎就是一个无论你怎样设置他都是定长字符串的。

 总结:我们会发现定义上面所char是定长的但是为什么当我们设置的是char(10)但是我们存储的是‘hello’存储进去的不是
 ‘hello    ’而是'hello'?
        我的理解是:前面我们由定义知道char会删除后面的空格,当我们存储进去的时候mysql会对char字符串进行填充,填充了之后由于mysql不知道我们存储进去的字符串有没有空格所以就会把所有的空格全部都放删除。
varchar和char该怎样的选择:
         若我们很多字符串的长度都集中那一堆数字厘米建议使用char  这样可以节约空间可提高执行的效率。若我们更具要求使用varchar的情况下我们存储的不仅有类容而且还存储了长度这样非常的浪费空间他会
           若varchar(100)    他会使用102  
                                           myisam:拆分不同分片存储
                                            innodb:分裂页来存储。
              若字符串的长度随机建议使用varchar  解决空间                                 

字节的存储类型

              binary
              varbinary  
              基本操作和字符串是一样的只不过他填充用\0来天聪,不会删除天聪字节码。

总结:varchar(10)和varchar(100)的区别
他们存储hello他们都是用同样大小的空间进行存储但是但是在定义自两个字段的时候他们初始化的内存空间的大小是不一样的所以他们对内存的消耗是不同的,特别是在内存里面进行临时的排序会照成资源的浪费。

你可能感兴趣的:(Mysql优化)