1. Query优化
    1. 优化基本思路和原理
      1. 优化需要优化的query
      2. 定位优化对象的性能瓶颈
        1. cpu,i/o
      3. 明确优化明白
      4. 从explain入手
      5. 多用profile
      6. 用小结果集驱动大的结果集
      7. 尽可能在索引中排序
      8. 只取自己需要的column
      9. 使用最有效的过滤条件
      10. 避免使用复杂的join 和子查询
    2. 充分利用Explain 和 Profiling
      1. Explain
        1. ID
          1. 查询的序列号
        2. select type
          1. dependent subquery
          2. 子查询内层的第一个select 依赖外部查询结果集
          3. dependent union
          4. 子查询中的union,且union从第二个select开始的后面的select 依赖外部查询的结果集
          5. primary
          6. 子查询中的最外层查询
          7. simple
          8. 除子查询和union之外的其他查询
          9. subquery
          10. 子查询内层查询的第一个select 结果不依赖外部查询的结果集
          11. uncacheable subquery
          12. 结果无法缓存的子查询
          13. union
          14. union中第二哥select开始后的所有select 第一个select 为primary
          15. union result
          16. union中的合并结果
        3. table
        4. type
          1. all
          2. 全表
          3. const
          4. 读常量,最多一条结果匹配
          5. eq_ref
          6. 最多只有一条匹配结果
          7. fulltext
          8. 全文索引检索
          9. index
          10. 全索引检索
          11. index_merge
          12. select 中同时使用两个或更多索引,索引合并在读表
          13. rang
          14. 索引范围扫描
          15. ref
          16. join语句中被驱动表索引引用的查询
          17. ref_or_null
          18. 与ref区别就是在使用索引查询之外再增加一个空值的查询
          19. system
          20. 系统表
          21. unique_subquery
          22. 子查询中返回结果字段组合是主键或唯一约束
      2. Profiling
    3. 利用索引
    4. Join原理及优化
    5. Order By,Group By ,Distinct
  2. 架构
    1. SQL layer
      1. initializer
        1. mysql server 启动时,对系统作各种各样的初始化操作, buffer cache结构初始化和内存空间的申请 系统变量,存储引擎初始化设置
      2. 核心 api
        1. 提供非常高效的底层操作功能优化的实现,包括底层数据结构的实现,特殊算法的实现,字符串 小文件io 格式化处理 以及内存管理部分
      3. 网络交互模块
        1. 提供网络底层交互所用的接口api,实现底层网络数据的收发,以方便各个模块的调用,以及这一部分的维护
      4. Client & Server 协议管理模块
        1. 实现客户断和mysql交互过程中的协议
      5. 连接管理,连接线程和线程管理模块
        1. 连接管理模块负责监听mysql server的各种请求,连接线程主要是负责mysql server与客户端的通信,线程管理魔力负责维护线程,包括线程的创建,线程的缓存
      6. 用户模块
        1. 用户的登录连接权限控制和用户的授权处理
      7. 访问控制模块
        1. 对每一个请求,给其对应的不同权限
      8. query解析,转发模块
        1. 客户端发送给服务器端的命令称为query
          1. 连接线程收到query后,将query传递给专门负责分类,然后转发给处理模块,这个模块就是解析转发模块,其主要工作是将query语句进行语义和语法的分析,按照不同的操作类型分类,作出针对性的转发
      9. Qurey cache模块
        1. select类缓存,hash
      10. query 优化模块
        1. 优化客户端的query,居客户端的query语句和数据库的统计信息,在一系列基础上进行分析,得到优化的策略
      11. 表变更管理模块
        1. 负责完成一些DML和DDL的query 如 insert,update creat delete alter table
      12. 表维护模块
        1. 表的状态检查,错误修复 以及优化和分析的工作
      13. 表管理器
        1. 维护.frm文件以及一个cache(负责各个表的结构信息)
      14. 日志管理
      15. 系统状态管理模块
        1. 客户端请求系统状态,将数据返回给用户如 show status
      16. 复制模块
        1. Master模块主要负责在Replication环境读取master端的binary日志,以及于slave端的i/o线程交互等工作
        2. Slave模块一是负责master端的请求和接受binary日志 并写入本地relay log中的io线程,另一个就是读取relay log日志 然后解析 并执行得到master端完成相同的结构命令,在交给slave 执行的sql线程
      17. 存储引擎接口
        1. 插件式管理
        2. 自由主题
    2. storage engineer layer
      1. MyISAM
      2. InnoDB
      3. NDB Cluster
      4. Merge
      5. Memory
      6. BDB(BerkeleyDB)
      7. Federated
      8. Archive
      9. Blackhole
      10. CSV
      11. different storage enginers
        1. 子主题 1
          1. 子主题 1
          2. 子主题 2
          3. 子主题 3
          4. 子主题 4
  3. 影响优化的因素
    1. 商业需求
    2. 系统架构以及实现
    3. Query语句
    4. Schema设计
    5. 硬件环境
  4. 优化
    1. Query优化
    2. Schema优化
    3. Mysql Server性能优化
    4. 存储引擎优化