前言
不管是多么高深的套路,还是要构建在基础之上,在进入这个主题的时候,我更加愿意的去从基础入手来阐述这一整个流程。前面已经教会了大家如何产生数据,这里就是开始慢慢梳理一些基础的数据库基础概念。
存储引擎的概念
- 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 存储数据信息和索引信息
- MyISAM
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再次筛选出满足条件的记录
- 取所满足条件的记录
- 对取出的记录进行排序
- 最终从取出的记录当中获取多少条记录显示出来