首页 > 编程知识 正文

数据结构基础面试题,前端数据结构与算法面试题

时间:2023-05-04 06:12:20 阅读:125697 作者:944

MySQL的一些问题,平时有说话的,听别人说话的,工作中遇到过的,总结一下,有问题和回答。

SQL查询语句的执行过程?

1、连接器。 客户端和服务器的tcp握手后,请确认用户名的密码。 用户名通过后,连接器将访问“权限表”以查询您拥有的权限。 此后,该连接中的权限判断逻辑取决于此时读取的权限。 这意味着,一个用户成功建立连接后,使用管理员帐户更改该用户的权限不会影响已连接的权限。 更改完成后,只有新连接使用新权限设置。

2、查询缓存。 如果启用缓存,则缓存查询,key是查询语句,value是查询结果。 (找到结果后直接返回客户端)

3、分析器。 Mysql首先识别关键字并确定要做什么,然后分析sql语法,并将sql解析为识别的语法。 如果有问题,MySQL会抛出语法错误。

4、优化器。 例如,如果表中有多个索引,则决定要使用哪个索引。 或者,如果一个语句具有多个表关联(join ),则确定每个表的连接顺序。

5、执行机构。 首先,判断对操作表有无权限,有权限时调用存储引擎的api接口获取数据,无权限时报告错误。

参考:

【MySQL实战45讲】01SQL查询语句如何执行(一) ) )

MySQL是否需要打开查询缓存?

1、查询缓存每次都需要将查询的查询结果保存为查询语句(key )和查询结果),这些都是一些资源消耗。

2、对于经常操作的表,不需要打开缓存。 由于简单的更新操作会禁用缓存,因此某些缓存可能会在未使用的情况下被禁用。

3、静态表的情况下,可以长时间更新一次,打开缓存。 这将提高缓存的命中率。

4、需要注意的是MySQL 8.0放弃了查询缓存功能。

查询优化程序工作流?

一个sql有很多查询计划,在一个sql实际运行之前,查询优化程序会找到并分析sql要运行的所有计划,然后找到比较成本最低的计划。 但是,成本最低的方案并不是响应时间短的方案。

优化过程包括

1、根据搜索条件,找到所有可用索引。

2、计算全表扫描的成本。

3、计算使用不同索引执行查询的成本。

4、比较各执行方案的成本,找出成本最低的一方。

MySQL的典型存储引擎是什么?

典型的存储引擎是MyISAM、InnoDB和Memory。

MyISAM存储引擎和InnoDB存储引擎有什么区别?

1、mysql版本5.5.5或更高版本,innodb是mysql的默认存储引擎。

2、innodb支持事物、支持行锁、支持外键、支持在线热备份,崩溃恢复速度也比MyISAM快很多。

3、myisam支持表锁,不支持行锁,不支持事物,数据以紧密格式存储,支持压缩表和空间数据索引。

MyISAM和InnoDB存储引擎的数据结构是什么?

1、这两个存储引擎都是b树。

2、mysql叶节点保存实际数据的地址值,其索引和实际数据是分开的,只不过是使用索引指向实际数据。 这种索引的模式称为非聚合索引。

3、innodb叶节点中存储了实际的数据,该索引中有一个称为聚合索引。

什么是索引?

1 .索引是存储引擎用于快速找到记录的数据结构。

2、通俗地说,相当于书的目录部分。

MySQL有什么索引?

B树、zydl、全文索引和空间数据索引(RTree )。

索引的优点?

1 .大大减少了服务器需要扫描的数据行数。

2 .帮助服务器不进行排序和分组。

3、避免临时表的建立(b树索引有序,可用于订单by和组by的操作。 临时表主要在排序和分组过程中创建,而不需要排序和分组或创建临时表)。

4、将随机i/o变为顺序I/o (btree索引规则,相邻数据统一存储)。

5、是最有效的查询优化手段。

为什么要重建索引?

1、索引由于删除或页面分裂等原因,数据页面可能存在空洞。

2、重建索引的流程是建立新索引,然后依次插入数据。 这将导致页面利用率最高。 这意味着索引更紧凑、更节省空间。

索引具体采用的数据结构是什么?

1、mysql常见的索引数据结构为b树和zydl。

2、mysql和innodb的默认索引结构为B Tree。

3、内存的默认索引结构为zydl。

B Tree和zydl有区别吗?

zdl索引仅支持包含=、in ()和=)的等值比较查询。 (注意和)是不同的操作。 也不支持类似where price 100的范围查询。 因为是一年

次定位,所以zydl索引查找的速度非常快。由于zydl索引并不是按照索引值顺序存储的,所以无法用于排序和分组。

b+tree 是由 b+树为存储结构实现的。b+tree 索引是从根节点到枝节点,最后才能到叶节点这样多次 i/o 访问,所以速度要慢于zydl索引。因为 b+tree 是按照顺序来建立索引树的(左子节点小于父节点,父节点小于右子节点),所以支持排序和分组操作。

聚簇索引和非聚簇索引的区别?

1、聚簇索引的叶子节点中存储的是行的全部数据,查询的时候直接返回结果,并不需要回表。

2、非聚簇索引的叶子节点中存储的是主键的值,需要找到主键的值,才能找到数据,需要查找两次 b+tree。

3、索引覆盖也是只查找一次。

MySQL 组合索引使用为什么要遵循最左原则?

1、因为 b+tree 是按照从左到右的顺序来建立搜索树的。

2、比如索引 (name, age, sex),索引会先比较 name,如果 name 一样,会再依次比较 age,sex,最后获取检索的数据。

MySQL 索引如果组合索引都使用上,用遵循最左原则吗?

不用。

因为查询优化器会为我们选择合适的索引。比如 (name, age, sex) 组合索引中,where 条件中只要出现了最左边的 name 字段就会匹配上。

MySQL 组合索引多个字段之间的顺序怎么选择?

将选择性最高的列放在最左边,这样能够更快的过滤出需要的行。

有一个计算公式:

SELECT COUNT(DISTINCT staff_id)/COUNT(*) AS staff_id_selectivity,

COUNT(DISTINCT customer_id)/COUNT(*) AS customer_id_selectivity,

COUNT(*)

FROM payment;

什么是索引下推?

1、mysql 5.6 引入索引下推(ICP)。

2、explain 分析结果中 extra 会显示 Using index condition。

参考:

Index Condition Pushdown Optimization

MySQL ICP 索引条件下推优化

未完待续……

本作品采用《CC 协议》,转载必须注明作者和本文链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。