Mysql优化学习_day1

本文分享了MySQL表设计的最佳实践,包括数据类型选择、字段优化、范式及逆范式应用、计数器表并发优化等内容。

选择优化的数据类型

数据类型选择的基本原则

尽量使用可以正确存储数据的最小数据类型

①.    更小的通常更好

②.    确保没有低估需要存储的值的范围

③.    选择不会超过范围的最小类型

尽量选择简单数据类型

①.    简单数据类型的操作通常需要更少CPU周期,例如:整型的操作代价比字符串更低

避免NULL

①.    除非真的需要NULL值,尽量设置NOT NULL

②.    NULL会占用更多的存储空间

③.    NULL会使mysql更难优化,更复杂

④.    对NULL改成NOT NULL的性能提升比较小,不是最优先项

⑤.    但是如果是计划成为索引列的字段,尽量设置为NOT NULL

一旦选择完数据类型,确保相关表中的数据类型都相同,包括unsigned这种属性,防止出现性能问题

标识列的字段选择尽量选择整数类型,字符串其次(不包括随机字符串:如md5()生成的)

 

 

MYSQL表设计注意点

尽量避免过多的字段列使用

尤其是避免有大量的无效列

单个查询最好最好在12个表以内做关联

 

使用枚举的情况下,尽量避免使用过多的枚举个数

 

集合不能滥用

 

NULL不能滥用,但是有时候使用NULL会比用数字代替更安全,不容易产生偏差

 

 

范式和逆范式

范式

逆范式

①.    每列都不可再分,具备原子性

②.    每行数据仅与其中一列有关系

③.    数据不存在传递关系

 

范式的优点:

①.    更新操作更快

②.    更少或者没有重复数据,更少的修改

③.    表更小,在内存在执行操作更快

④.    更少使用group by和distinct

 

范式的缺点:

①.    通常需要关联查询,代价昂贵

容易造成索引策略失效

逆范式的优点:

①.    有效避免关联,避免关联的随机IO,更快

②.    有效的索引策略

 

 

逆范式的缺点:

①.    数据冗余

②.    更新操作量大

混合使用范式和逆范式是实际使用的方式

 

计数器表的并发性能优化

普通的计数器表为一张表,一个字段(num),只有一行,仅做计数使用

为了提高并发性能

可以提前插入100行数据,一张表,两个字段(id,num),100行0值记录

update table set num = num+1 where id= floor(rand()*100+1);

select sum(num) from table;

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值