网站左右箭头素材,jf厂高仿手表网站,网站建设公司哪家好 皆来磐石网络,阳江招聘网鹏程其他资料
每日速记10道java面试题01-CSDN博客
每日速记10道java面试题02-CSDN博客
每日速记10道java面试题03-CSDN博客
每日速记10道java面试题04-CSDN博客
每日速记10道java面试题05-CSDN博客
每日速记10道java面试题06-CSDN博客
每日速记10道java面试题07-CSDN博客
每…其他资料
每日速记10道java面试题01-CSDN博客
每日速记10道java面试题02-CSDN博客
每日速记10道java面试题03-CSDN博客
每日速记10道java面试题04-CSDN博客
每日速记10道java面试题05-CSDN博客
每日速记10道java面试题06-CSDN博客
每日速记10道java面试题07-CSDN博客
每日速记10道java面试题08-CSDN博客
每日速记10道java面试题09-CSDN博客
每日速记10道java面试题10-CSDN博客
每日速记10道java面试题11-CSDN博客
每日速记10道java面试题12-CSDN博客
目录 1.MySQL中的数据排序是怎么实现的
2.那怎么去优化ORDER BY呢
3.MySQL中的Change Buffer是什么?有什么作用 4.详细描述一下一条SQL语句在MySQL中的执行过程
5.MySQL的存储引擎有哪些
6.MySQL的索引有哪些
7.MySQLInnoDB 引擎中的聚集索引和非聚集索引有什么区别?
8.MySQL索引的最左前缀匹配原则是什么?
9.MySQL的覆盖索引是什么
10.MySQL的索引下推是什么 1.MySQL中的数据排序是怎么实现的
MySQL中的数据排序主要通过ORDER BY子句实现其底层实现机制主要有两种方式:
使用索引排序:当ORDER BY子句中的列恰好有对应的索引时MySQL可以直接利用索引来完成排序操作这是最高效的排序方式。索引本身是有序的所以MySQL只需要按照索引的顺序扫描即可得到排序后的结果。
文件排序(flesort):当无法使用索引进行排序时MySQL会使用文件排序。这种方法会将需要排序的数据加载到内存中然后在内存中进行排序。如果数据量较大超过了系统变量 sort buffer size 的大小还会使用临时文件来协助排序。
具体实现如下
首先MySQL会检查ORDER BY子句中的列是否有可用的索引如果有可用的索引MySQL会直接使用索引进行排序。如果没有可用的索引MySQL会执行以下步骤: 1.从表中读取满足条件的所有行 2.对于每一行只保存需要排序的列和可以唯一标识行的列(如主键) 3.使用快速排序算法在内存中对这些数据进行排序 4.如果数据量太大会使用临时文件来辅助排序 5.根据排序结果回表查询所需的列
延伸→那怎么去优化ORDER BY呢
2.那怎么去优化ORDER BY呢
1.根据排序字段建立合适的索引多字段排序时也遵循最左前缀法则 2.尽量使用覆盖索引 3.多字段排序一个升序一个降序此时需要注意联合索引在创建时的规则(ASC/DESC) 4.如果不可避免的出现file sort大数据量排序时可以适当增大排序缓冲区大小sort_buffer_size(默认256K) SQL语句:show variables like sort_buffer_size;
3.MySQL中的Change Buffer是什么?有什么作用
Change Buffer 更改缓冲区针对于非唯一二级索引页在执行 DML语句增删改时如果这些数据Page 没有在Buffer Pool中不会直接操作磁盘而会将数据变更存在更改缓冲区Change Buffer 中在未来数据被读取时再将数据合并恢复到Buffer Pool中再将合并后的数据刷新到磁盘中。
至于Buffer Pool是什么可以去参考我的另一篇文章MySQL数据表中的InnoDB引擎原理存储结构架构事务原理MVCC_mysql innodb存储引擎实现原理-CSDN博客 4.详细描述一下一条SQL语句在MySQL中的执行过程
1.当客户端的SQL发送到MySQL时第一步是来到serve层的连接器连接器会去验证身份和权限因为你有连接数据库的权限不代表就有操作数据库的权限
2.下一步就到了分析器进行SQL语法和词法分析判断你这条SQL是什么类型的语句以及携带什么样的参数
3.经过分析器之后就到了优化器优化器会帮助我们选择使用哪个索引以及如果这条SQL涉及多表查询优化器还会帮我们选择连表顺序
4.最后到达执行器执行器会操作存储引擎提供的接口并执行经过分析器分析以及优化器优化过后的SQL语句并返回结果。
5.MySQL的存储引擎有哪些
1.InnoDB:是Mysq!默认的存储引擎支持事务表级锁和粒度更小的行级锁具有事务提交回滚和数据崩溃恢复的功能 2. MyISAM: 是之前Mysql默认的存储引擎不支持事务和行级锁支持表级锁锁的粒度较大更新性能较差更适合读多写少的场景 3.Memory:相较于InnoDB和MyISAMMemroy是存在于内存中的速度更快但是不具有持久化的能力适合临时存储的场景
6.MySQL的索引有哪些
按索引的存储形式来分聚集索引和二级索引
按索引的具体类型来分有主键索引、唯一索引、常规索引、全文索引。
关于索引的其他只是可以参考我其他文章深度解析MySQL数据库索引是什么有什么用怎么用_mysql索引的使用和原理-CSDN博客
7.MySQLInnoDB 引擎中的聚集索引和非聚集索引有什么区别? 聚集索引索引叶子节点存的是数据行可以直接访问整条数据而且一张表只有一个聚集索引通常是主键索引。
非聚集索引索引叶子节点存的是主键和对应的索引列一般走非聚集索引如果不是覆盖索引还有回去聚集索引再查一次数据这个过程叫回表查询。
8.MySQL索引的最左前缀匹配原则是什么?
在使用联合索引时查询条件必须从索引的最左侧开始匹配。如果一个联合索引包含多个列查询条件必须包含第一个列的条件然后是第二个列以此类推。
具体例子可以看以下我的文章
深度解析MySQL数据库索引是什么有什么用怎么用_mysql索引的使用和原理-CSDN博客
9.MySQL的覆盖索引是什么
MySQL 的覆盖索引(Covering lndex)是指二级索引中包含了查询所需的所有字段从而使查询可以仅通过访问二级索引而不需要访问实际的表数据(主键索引)。不需要回表查询性能就会好很多。
10.MySQL的索引下推是什么
索引下推是一种减少回表查询提高查询效率的技术。它允许 MySQL 在使用索引查找数据时将部分查询条件下推到存储引擎层过滤从而减少需要从表中读取的数据行减少了 IO(本该由 Server 层做操作交由存储引擎层因此叫做“下推”)
简单来说就是
如果没有索引下推流程就是通过二级索引查到主键id后回表完再进行where条件过滤
有索引下推流程就是二级索引查到数据后直接where过滤一遍 再进行回表 减少回表的次数
其实就是回表前再过滤一下这样子回表查询的时候少查了一些数据提高效率。