MySQL性能优化-表结构篇

在这里我们谈一谈MySQL的性能优化!

1.1MySQL逻辑架构

如上是MySQL的逻辑架构图

最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如链接处理,授权认证,安全等。

第二层架构是MySQL比较重要的部分。大多数MySQL的核心服务功能都在这一层,包括查询解析,分析,优化,缓存以及所有的内置函数(列如:日期,时间,数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。

第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。

1.2选择优化的数据类型

MySQL支持的数据类型非常的多,选择正确的数据类型十分的重要,当你不知道该如何去确定数据类型的时候,那么可以参考下下边的简单原则

 · 更小的通常更好

    一般情况下,尽量选择可以使用的最小的数据类型,举个例子,假如我们需要代表我国省份编号的provice字段,这里我们知道中国所有省市自治区才32个,因此我们大可以用TINYINT类型,这样就比INT类型节约了三个字节

 · 简单就好

    简单数据类型的操作对于CPU的周期来说更加的友好,因此能用数字类型就不要用VARCHAR类型,毕竟VARCHAR类型还得有字符集和校对规则。再比如,我们可以使用MySQL的内部的时间类型DATE、TIMESTAMP类型来存储时间,而不是用VARCHAR类型

 · 尽量避免NULL

    在我们设计表结构的时候,有很多字段设置的默认值都是NULL。通常情况下,如果我们并非十分的需要NULL类型,那么指定类型为NOT NULL是一个较好的方案。与此同时,NULL值得存在,不利于索引性能的发挥,当有NULL值的时候,每个索引记录需要一个额外的字节。

在选择大的数据类型时往往很容易,但是涉及到一些具体的情况的时候,往往很难选择。

列如:DATETIME和TIMESTAMP列都可以存储相同类型的数据:时间和日期,精确到秒,但是TIMESTAMP所占用的存储空间仅为DATETIME属性的一半,当然它表示的范围也比较小,这时候选择就必须根据具体情况具体分析了

4.1.1整数类型
类型大小(Byte)范围
TINYINT1-128~127
SMALLINT2-32768~32767
MEDIUMINT3-8388608~8388607
INT4-2147483648~2157483647
BIGINT8-2^32~2^32-1
整数类型还可以设置为无符号(UNSIGNED),这样能表示的数的范围就增加了一倍,例如:UNSIGNED TINYINT能表示0~255。
我们在使用Navicat或者其他的可视化数据库软件的时候经常会看到INT(11)、INT(8)等设置INT类型长度的设置,实际上INT类型的大小就是4个字节,在括号中设置数字,仅仅设置了,在MySQL命令行客户端下显示的INT类型字符的个数
4.1.2实数类型
类型大小(Byte)
FLOAT4
DOUBLE8
DECIMAL>8
DECIMAL的特殊用法:DECIMAL(18,9),这句话的意思是该变量从小数点分开,小数点后9个字节,小数点前9个字节,小数点占用一个字节。这里,通常在高精度的情况下使用DECIMAL,比如说涉及到金融方面的高精度要求的字段,平常下默认用double就行了。
4.1.3字符串类型
4.1.3.1-VARCHAR与CHAR
VARCHAR

  varchar类型用于存储可变长的字符串,越短的字符串使用越短的存储空间。在存储字符串的同时,varchar类型还需要额外的空间来存储该字符串的长度,在latin1字符集的情况下,varchar(10)需要消耗11个字节的空间而varchar(1000)需要1002个字节的空间。

CHAR

  char类型用于存储定长的字符串,常用在存储定长的UUID上,或者平均长度很接近的字符串。

以上便是varchar和char类型的具体区别,varchar和char类型还有一个重要的区别,varchar类型会有自动省略字符串末尾的空格,而char类型会将字符串末尾的空格保留。


与varchar和char类型类似的还有BINARY和VARBINARY类型,他们存储的是二进制的字符串。

4.1.3.2-BLOB与TEXT

BLOB和TEXT都是为了很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值