首页 > 数据库 >MySQL的server层和存储引擎层是如何交互的(处理SQL)

MySQL的server层和存储引擎层是如何交互的(处理SQL)

时间:2024-10-17 10:44:25浏览次数:8  
标签:存储 SQL server 索引 引擎 MySQL where

假设表结构

create table test(a int not null, b int not null, c int not null, primary key(a), unique key idx_b(b))Engine=InnoDB;

select * from test where b < 2 and c < 3;
  1. MySQL服务层会将SQL解析,将where条件交给存储引擎层。

  2. 存储引擎层拿到where条件后,发现正好命中唯一索引idx_b,按照b<2的条件查找到第一条记录,获取记录下的主键id,通过主键索引树回表,获取到记录,返回给server层。

  3. server层拿到存储引擎返回的记录后,判断其余where字段是否满足条件,满足条件则保存着,等查询完所有记录返回给客户端。

如果是联合索引

idx_abc(a,b,c)
select * from test where a < 2 and c < 3;

在MySQL引入了索引下推之后,上述流程中的第二步就改成:遍历联合索引树获取到a<2的第一条记录后,再判断联合索引中的字段c是否满足条件,如果都满足再返回给server层。

总结

存储引擎层会根据server层传递的where条件判断能命中哪些索引,从对应索引树上获取数据,数据返回到server层后,由server层判断其余的where条件中的字段是否满足条件。(PolarDB引入了表扫描下推到存储的技术,所有的where判断都将在存储层完成)

标签:存储,SQL,server,索引,引擎,MySQL,where
From: https://www.cnblogs.com/tyhA-nobody/p/18471559

相关文章

  • sql-labs靶场第十五关测试报告
    目录一、测试环境1、系统环境2、使用工具/软件二、测试目的三、操作过程1、寻找注入点2、注入数据库①寻找注入方法②爆库,查看数据库名称③爆表,查看security库的所有表④爆列,查看users表的所有列⑤成功获取用户名和密码信息3、sqlmap注入方法①爆库②爆表③爆......
  • 力扣刷题_SQL50题
    高频SQL50题(基础版)-学习计划-力扣(LeetCode)全球极客挚爱的技术成长平台602.好友申请II:谁有最多的好友题目:编写解决方案,找出拥有最多的好友的人和他拥有的好友数目。生成的测试用例保证拥有最多好友数目的只有1个人。CreatetableIfNotExistsRequestAccepte......
  • mysql 8查看锁阻塞
    mysql8:事务:information_schema.innodb_trx所有请求中和已经持有的锁:performance_schema.data_locks存在锁等待即阻塞的信息:performance_schema.data_lock_waitsdata_locks:该表显示了所有请求中和已经持有的锁。列名 含义ENGINE 存储引擎ENGINE_LOCK_ID 锁的IDENGINE_T......
  • MySQL(python开发)——(5)聚合操作
    MySQL(python开发)——(1)数据库概述及其MySQL介绍MySQL(python开发)——(2)数据库基本操作及数据类型MySQL(python开发)——(3)表数据的基本操作,增删改查MySQL(python开发)——(4)高级查询语句MySQL聚合操作聚合操作指的是在数据查找基础上对数据的进一步整理筛选行为,实际上聚合......
  • 力扣面试_SQL50题
    高频SQL50题(基础版)-学习计划-力扣(LeetCode)全球极客挚爱的技术成长平台585.2016年的投资CreateTableIfNotExistsInsurance(pidint,tiv_2015float,tiv_2016float,latfloat,lonfloat);TruncatetableInsurance;insertintoInsurance(pid,tiv_2015,......
  • MySQL数据的导入
    我们在帖子MySQL数据的导出-brucexia-博客园(cnblogs.com)中讲了MySQL数据的导出,本文讲讲解MySQL数据的导入。MySQL数据的导入包括使用LOADDATAINFILE命令导入和使用mysqlimport命令导入。使用LOADDATAINFILE方式导入文本文件MySQL允许将数据导出到外部文件,也可以从外......
  • MySql和简单的sql语句
    安装数据库今天进行mysql的安装学习了简单sql语句mysql去官网安装mysql的社区版的八点几版本,安装之后需要设置密码,执行mysql-uroot-p,输入密码就可以进入mysql,使用exit;退出SQL语句分为DDL,DML,DQL,DCL,几大类,creatbasedata......
  • MySQL 通过 Next-Key Locking 技术(行锁+间隙锁)避免幻读问题
    在MySQL中,InnoDB引擎通过Next-KeyLocking技术来解决幻读问题。幻读是一种事务并发问题,通常出现在RepeatableRead隔离级别下的范围查询操作中。幻读的现象是,事务在查询时多次执行相同的范围查询,但由于其他事务的插入或删除操作导致结果不一致,出现“幻觉”一样的记录。Next-KeyL......
  • 使用MySQL之排序检索数据
    排序数据子句(clause):SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有SELECT语句的FROM子句等。为了明确地排序用SELECT语句检索出的数据,可使用ORDERBY子句。ORDERBY子句取一个或多个列的名字,据此对输出进行排序......
  • socketserver实现多用户连接简单代码
    1.服务端importsocketserverclassMyTCPHandler(socketserver.BaseRequestHandler):defhandle(self):whileTrue:try:self.data=self.request.recv(1024).strip()print("{}wrote".format(self.client_a......