mysql优化(一)

字符与字节的区别

1、计算机存储信息的最小单位,称之为位(bit),音译为比特,二进制的一个“0”或一个“1”叫一位。 
2、计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节。一般而言:一个标准英文字母占一个字节位置,一个标准汉字占二个字节位置。 
3、计算机存储容量大小以字节数来度量,1024进位制:
  1024B=1K(千)B 
  1024KB=1M(兆)B 
  1024MB=1G(吉)B 
  1024GB=1T(太)B 
  以下还有PB、EB、ZB、YB 、NB、DB,一般人不常使用了。 
4、字符是一种符号,同以上说的存储单位不是一回事。

1个字节等于8个bit位,每个bit位又0/1两种状态,也就是说一个字节可以表示256个状态,计算机里用字节来作为最基本的存储单位。
一般来说,英文状态下一个字母或数字(称之为字符)占用一个字节,一个汉字用两个字节表示。在不同的编码方式下一个字符占的字节不太一样。
按照ANSI编码标准,标点符号、数字、大小写字母都占一个字节,汉字占2个字节。按照UNICODE标准所有字符都占2个字节。

MySQL 数据类型

int(5)类型中的长度 5的理解:  不够5位的在左侧用0来填充; 效果如

id     number

1     00001

2    00002

int类型, 占用字节数为4byte, 学过计算机原理的同学应该知道, 字节(byte)并非是计算机存储的最小单位, 还有比字节(byte)更小的单位, 也就是位(bit),一个位就代表一个0或1; 8个位组成一个字节; 一般字节用大写B来表示byte, 位用小写b来表示bit.

根据int类型允许存储的字节数是4个字节, 我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0, 最大值为4294967295(即4B=32b, 最大值即为32个1组成);

 

表的优化与列类类型的选择

1 定长与变长分离

 如:id int ,占4个字节,char(4) 占4个字符长度,也是定长,time

 即每一单元值占的字节是固定的  

 核心且常用字段,宜建成定长,放在一张表。

 而 varchar ,text,blob 这种变长字段,适合单放一张表,用主键与核心表关联起来。

 2 .  常用字段和不常用字段要分离

 需要结合网站具体的业务分析,分析字段的查询场景,查询频率低的字段,单拆出来

  3.   需要关联的的统计字段,添加冗余字段

 例如:评论表中添加评论数量number,

用户没评论一次或删除一次更新number字段

优化的思路:要么用空间换时间,要不用时间换空间。

列选择原则

1 字段类型的优先级  整形> date ,time > enum(枚举) char > varchar >blob .text 

 整型的优势: 定长,没有国家/地区区分,没有字符集的差异 ,各国家的整型都是一样的

 比如 :tinyint 1,2,3,4    ————  char(1)     1,2,3,4                

 从空间上都是占一个字节,但是order by 排序会更快,

原因:后者需要考虑字符集与校对集,

2 够用就行,不要太多

  原因;大的字段浪费内存,影响速度

  以年龄为例: tinyint unsigned not null   可以存储255,用int浪费了3个字节

    以varchar(10),varchar(300) 存储的内容相同,但是在表联查时,varchar(300) 要花更多内存

3  尽量避免使用null

原因:null 不利于索引,要用特殊字节来标注 例如:默认值0

4 enum 列

enum列在内部是用整型来存储的

enum列与enum列相关联速度最快

enum例与var(char) 的弱势 在碰到与char关联时,要花时间

优势在于当char非常长时,enum依然优势明显

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值