0%

MySQL优化系列(一)

前言

不管是多么高深的套路,还是要构建在基础之上,在进入这个主题的时候,我更加愿意的去从基础入手来阐述这一整个流程。前面已经教会了大家如何产生数据,这里就是开始慢慢梳理一些基础的数据库基础概念。

存储引擎的概念

  • MySQL中的额数据用各种不同的技术存储在文件(或内存)中
  • 这些技术中的每一种技术都是用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力
  • 通过不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能
  • 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎

举个例子:

  • 如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。
  • 也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)选择支持事务的存储引擎

查看存储引擎

1
show engines;

查看当前使用的存储引擎

1
show variables like '%storage_engine%';

MyISAM和InnoDB的区别

  • 主外键

    • MyISAM不支持
    • InnoDB支持
  • 事务

    • MyISAM不支持
    • InnoDB支持
  • 行表锁

    • MyISAM 支持 表锁
    • InnoDB 支持 行锁
  • 缓存

    • MyISAM 只缓存索引,不缓存数据
    • InnoDB 不仅缓存索引,还缓存真实数据,对内存要求比较高,而且内存大小对性能有决定的影响
  • 表空间

    • 两者占用都很小
  • 关注点

    • MyISAM —— 性能
    • InnoDB —— 事务
  • 都默认安装,创建表用哪种默认引擎,看版本

  • 文件结构

    • MyISAM
      • b.frm 描述表结构文件,字段长度等
      • b.myd:数据信息文件,存储数据信息(如果采用独立表存储模式)
      • b.myi:索引信息文件
    • InnoDB
      • b.frm 描述表结构,字段长度等
      • b.ibd 存储数据信息和索引信息

SQL的执行顺序

代码编写顺序

`Select distinct 字段`
`Form 表名`
`JOIN 表明` 
`ON 连接条件`
`Where 查询条件`
`Group by 分组字段`
`Having 分组后条件`
`Order by 排序条件`
`Limit 查询起始位置, 查询条数` 

MySQL读取顺序

`Form 表名`
`ON 连接条件`
`JOIN 表明` 
`Where 查询条件`
`Group by 分组字段`
`Having 分组后条件`
`Select distinct 字段`
`Order by 排序条件`
`Limit 查询起始位置, 查询条数` 

整体过程

  • 先对多表进行关系分析,根据条件找出符合条件的记录
  • 在符合条件的基础上进行再次where条件筛选
  • 对筛选出来的内容进行分组操作
  • 分组完成后,使用Having再次筛选出满足条件的记录
  • 取所满足条件的记录
  • 对取出的记录进行排序
  • 最终从取出的记录当中获取多少条记录显示出来