MySQL面试常见题目(九)

原文地址:MySQL面试常见题目(九)

1、MyISAM表类型在哪里以什么类型存储?

每个MyISAM表格以以下三种格式存储在磁盘上:

  1. 【.frm】文件存储表定义。

  2. 数据文件具有【.MYD】(MYData)扩展名。

  3. 索引文件具有【.MYI】(MYIndex)扩展名。

2、什么是聚簇索引?何时使用聚簇索引和非聚簇索引?

聚簇索引:将数据存储与索引放到一起,找到索引也就找到了数据。

非聚簇索引:将数据存储与索引分开,索引结构的叶子节点指向数据的对应行,MyISAM通过key_buffer将索引先缓存到内存,当需要访问数据或者说通过索引访问数据时,在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也正是索引未命中时,查询效率低下的原因。

3、MySQL查询缓存?

MySQL在得到一个执行请求后,会先去查询缓存中查找是否执行过这条SQL,之前执行过的SQL以及结果集都会以key-value形式直接存放在内存,key是SQL,value是结果集,如通过key可查到对应value,则直接返回结果集,如未找到,则继续执行MySQL后面的操作逻辑,查询后的结果集会被放入查询缓存中。

4、MySQL分析器?

MySQL会根据SQL进行解析,分析器会先做词法分析,确认SQL中各字符含义,之后进行语法分析,根据语法规则验证SQL是否满足MySQL语法,不满足则提示error。

5、MySQL优化器?

优化器会判断SQL使用了那种索引、何种连接,其作用就是确定效率最高的执行方案。

6、MySQL执行器?

此阶段MySQL会先验证是否具有执行SQL的权限,无权限则会返回错误提示,有则打开表继续执行,执行器会根据表的引擎定义去使用这个引擎提供的接口。

7、临时表如何删除?

临时表:MySQL执行SQL过程中通常会临时创建一些存储中间结果集的表,此表只对当前连接可见,在连接关闭时,此表会被删除并释放所有表空间。

临时表可分为两种,一种是内存临时表(使用MEMORY存储引擎),一种是磁盘临时表(使用MyISAM存储引擎)。

MySQL会产生临时表的几个场景:

  1. 使用UNION/UNION ALL查询(联合查询):都用于联合查询,UNION会去掉两表中的重复数据,相当于对结果集做了一下discount去重操作,UNION ALL则不会排重,返回所有数据。

  2. 使用TEMPTABLE算法或是UNION查询中的视图操作,TEMPTABLE是一种创建临时表的算法,将结果集放入放到临时表中,这也就是说,MySQL要先创建好这个临时表,之后将结果集放入,之后使用此表进行对应查询。

  3. ORDER BY 和GROUP BY 子句不一样时也会产生临时表。

  4. DISTINCT 查询且加上ORDER BY。

  5. SQL如查询结果集较小时,用SQL_SMALL_RESULT选项优化,产生临时表。

  6. FROM 中的子查询。

  7. EXPLAIN 查看执行计划结果的Extra 列,如使用Using Temporary 就表示会用到临时表。

8、union和union all需注意的点?

通过union连接的SQL分别单独取出的列数必须相同,使用union时,多个相等的列将会被合并,由于比较耗时,一般不直接使用union进行合并,通常采用union all。

9、MyISAM支持的索引类型?

  1. Full-Text索引(全局索引):未解决针对文本的模糊查询效率低下的问题。

  2. B-Tree索引:所有索引节点都按平衡树的数据结构来存储,所有索引数据节点都在叶子节点。

  3. R-Tree索引:用于存储空间和多维数据的字段做索引,目前MySQL仅支持geometry类型字段作索引,相对于B-Tree,R-Tree的优势在于范围查找。

至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  

Guess you like

Origin blog.csdn.net/luyaran/article/details/121261141