mysql
2018-10-10 本文已影响0人
3bd3c1497272
存储引擎架构
mysql最nb的特征是它的存储引擎架构,这种架构可以将查询处理与各类服务器任务与数据的存储/提取相分离
并发控制
- 服务器层
- 存储引擎层
锁策略
- 表锁
- 行级锁
隔离级
- READ UNCOMMITED (读取未提交的内容) 脏读
- READ COMMITED 读取提交的内容 不可重复读
- REPEATABLE READ 可重读 幻读
- SERIALIZABLE 可串行化
MVCC的原理
存储引擎的选择
mysql存储引擎的选择是一个难点,需要好好整理一下,但最好是将所有的表都设置成一个存储索引
表的设计
为了加快数据的读取而添加的索引会减慢更新的速度 ---总是在找某种平衡
非规范化的架构能加快某些类型的查询,但却会让其他类型的查询变慢 ----长短表的设计
添加计数表和汇总表示优化查询的好方法,但是它们的维护代价很高 ----可以不用groupby提升很大的性能
mysql数据类型的选择
- 更小通常更好
- 简单就好
- 尽量避免使用null
索引是在存储引擎中实现的,而不是在服务器层
mysql支持的索引类型
- B-tree索引
- 哈希索引
- 空间索引
- 全文索引
如何有效的使用索引
隔离列 ---- select * from user where age + 1 = 30 不使用索引
前缀索引与索引选择性
当使用缓存表或者是统计表的时候,你需要觉得是否要进行实时数据维护或者周期性重建
使用影子表
drop table if exists my_summary_new,my_summary_old;
create table my_summary_new like my_summary;
rename table my_summary to my_summary_old,my_summary_new to my_aummary;
在分析mysql性能不好的查询时 需要通过查看以下2点来分析
查明应用程序是否正在获取超过需要的数据,这通常意味着访问了过多的行或列
--更多的是通过业务方面来控制
查明mysql服务器是否分析了超过需要的行
--访问数据的扫描情况(全表扫描 范围扫描 索引扫描)
mysql提升性能的策略
- 复杂查询与多次查询
- 缩短查询
- 分解连接