通过公开课学习的,记录一下~~~
数据库主要存储引擎
myisam
支持表级别的锁,不支持事务,读写不能并发进行,插入和查询会锁表,但因为直接存储了行数,则执行count更快,但是加上条件就不行了。
innodb
支持事务、支持行级锁表级锁两种粒度,支持XA两阶段提交协议,支持嵌套事务,并且支持读和写并发操作。
memory
存储在内存,一般用于临时表,读写速度快,如果重启会造成数据丢失。
csv
电子表格,数据以逗号分隔,不允许有空行,不支持索引。导入导出数据时,用CSV引擎还是可以的。
查询语句的执行流程
以上图所示,大概的sql查询流程如下:
- 客户端与服务端建立TCP连接后,
会先去缓存里验证用户权限信息,如果失效或者其他情况会直接报出连接问题。(紫色箭头) - 服务端接收到sql后会先去缓存里查询是否存在该语句的缓存结果,如果存在则直接返回。(黄色箭头)
- 如果缓存里没有,sql分析器就会对SQL语句进行词法分析和语法分析,检验SQL语句的正确性,通过之后继续往下执行。
- 语法分析后,优化器会对sql进行解析,判断出走什么索引,怎么执行,生成出sql执行计划,还会优化重写sql。
- 执行器检验当前用户的操作权限,如果在权限内,根据执行计划,通过对应的存储引擎执行sql,拿到结果,并返回。