1.说一说执行一条查询 SQL 语句的全过程
谈一下我的理解,就是在执行一个查询SQL语句的时候,需要经过这几个阶段
1.连接器 它的作用时连接MySQL,校验使用者身份
2.查询缓存 如果命中了他中存在的就直接返回,没有就执行下一个,在MySQL8.0中他就被删除了
3.解析器 分析语法,分析词性,创建一个语法树
4.预处理阶段 就是检查这个表的完整性
5.优化阶段 选择一条成本最小的计划
6.执行阶段 按照执行计划执行,然后在储存引擎中查询记录,返回到客户端
2.MySQL 存储引擎有哪些?各自有什么区别?
比较常见的有两种 一是InnoDB 二是 Myisam这两种比较常见
另外还有archive csv blackhole 等等
3.MyISAM 和 InnoDB 存储引擎有什么区别?
这个两个的区别还是挺大的,在内存储存上,InnoDB将数据和索引数据存放在一块,而MyISAM是将这两个分开放的,同时InnoDB的B+树的叶子节点储存的是数据和索引数据,而MyISAM储存的是数据地址和索引数据
InnoDB是有行间索和日志,而MyISAM只有表锁
4.NULL 值是如何存储的?
在MySQL中compact行列式,有null值列表,null值就存放在null值列表中,其实就不会占据内存空间,然后null值列表需要占据1字节的空间
5.char 和 varchar 有什么区别?
在最大值上说char是255,而varchar是65535
char可以去空格 而varchar不可以,因为在储存时char不够就用空格填充
varchar会占用一到两个字节,因为他会存储字符串,如果大于255就两个字节,如果小于255就一个字节
还有就是他们的性能上,我认为大部分情况下varchar的性能大于char因为char在存储时会用空格填充,所以就会性能降低,也不是绝对的,因为char的空格填充在分页,断页等情况下也是起大作用的,而用varchar就是导致性能降低
6.假如说一个字段是varchar(10),但它其实只有6个字节,那他在内存中占的存储空间是多少?在文件中占的存储空间是多少?
分别占的存储空间时10和6
7.普通索引和唯一索引有什么区别?哪个更新性能更好?
普通索引的索引行是可以重复的,而唯一索引的索引行是不可以重复的
我觉得是普通索引的更新性能好
假如普通索引的更新页没有在内存中是可以放入change buffer 不用再进入磁盘中,而唯一索引这需要