mysql

存储引擎架构

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提升性能的策略

  • 复杂查询与多次查询
  • 缩短查询
  • 分解连接

select count(*) from user 这样的sql很难进行优化,可以使用中间统计表来进行优化

你可能感兴趣的:(mysql)