首页
学习
活动
专区
工具
TVP
发布

一条查询SQL执行原理

先熟悉一下浅而易懂SQL执行的流程图SQL查询过程七步曲 ? 1.查询SQL发送请求 客户端将查询sql按照mysql通信协议传输到服务端。...服务端接受到请求后,服务端单起一个线程执行sql 2.判断是否为select查询语句 执行前mysql会通过命令分发器判断其是否是一条select语句(判断sql语句前6个字符是否为select);...3.查询缓存先行 MySQL在开启查询缓存的情况下,首先会先在查询缓存中查找该SQL是否完全匹配,如果完全匹配,验证当前用户是否具备查询权限,如果权限验证通过,直接返回结果集给客户端,该查询也就完成了。...如果语法不正确 You have an error in your SQL syntax 5.查询之预处理器 (1)分析器的工作完成后,将语句传递给预处理器,检查数据表和数据列是否存在,解析别名看是否存在歧义如果错误返回...7.查询之执行器 最后,交给执行器去具体执行该查询语句。执行器开始执行后,会逐渐将数据保存到结果集中,同时会逐步将数据缓存到查询缓存中,最终将结果集返回给客户端。 ?

59630
您找到你想要的搜索结果了吗?
是的
没有找到

一条这样的SQL语句最多能查询出来多少条记录

前言 今天突发奇想,一条这样的 SQL 语句【SELECT * FROM user】能查询出多少条记录?...,这也同时解释了,如果你发送的一条 SQL 语句特别大可能会执行不成功的原因,尤其是insert update 这种,单个 SQL 语句不是没有上限的,不过这种情况一般不是因为 SQL 语句写的太长,主要是由于某个字段的值过大...因为我们一条记录的大小就是 8K 多了,所以肯定超过 1024byte。可见文档的说明是对的,max_allowed_packet确实是可以约束单行记录大小的。...---- 答案   文章写到这里,其实答案已经逐渐浮出水面了,“一条 SQL 最多能查询出来多少条记录?”...写在最后的话   本文花费大量时间介绍了一条查询SQL语句最多能查询出多少条记录,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!

21840

mysql查找最后一条记录_mysql查询记录总数

SQL如下: select a,b from table where a>'某个时间' order by a desc limit 1 (上面SQL中a为时间)。 用max(time)查询方可!!...(整条记录) mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 select * from...查询最后一行和第一行记录 查询前几行和后几行记录 1、查询第一行记录: select * from table limit 1 2、查询第n行到第m行记录 select * from table1...table1 order by id desc dlimit n;//倒序排序,取前n行 id为自增形式 5、查询一条记录($id)的下一条记录 select * from table1 where id...>$id order by id asc dlimit 1 6、查询一条记录($id)的上一条记录 select * from table1 where id<$id order by id desc

6.4K20

一条查询SQL的执行过程

查询缓存( Query cache) 客户端与服务端建立连接后,MySQL 在执行查询语句时会先查询缓存,校验这条SQL是不是在之前执行过。...分析器 Mysql没有命中查询缓存,那么就会进入分析器,分析器主要是用来分析SQL语句是来干嘛的。...分析器主要分为以下两步: 词法分析 :一条SQL语句有多个字符串组成,首先要提取关键字,比如select,提出查询的表,提出字段名,提出查询条件等等。...语句分析 我们以下面一条真实SQL查询语句来进行分析下MYSQL查询的执行过程select id,name,sex,phoone from user t where t.age='26' and t.account...,提取sql语句的关键元素,比如提取上面这个语句是查询select,提取需要查询的表名为user,需要查询的列为id,name,sex,phoone,查询条件是 age=26 和 account=javadailly

1.3K10

sql中筛选第一条记录

image.png 通过查询出来的最大的from_date取筛选最近的的一条职位信息。...image.png ---- 方法二 通过rank over partition by函数实现,这个目前是Oracle独有的函数,如果你用的是mysql或者sql server就没办法使用了。...我们之前在问题里面提到了一个emp_no会对应多条职位信息,然后对于每个emp_no的记录进行一个降序排列,接下来我们只需要把上面的结果当成一个子查询然后筛选rank = 1 就好了。...---- 综上,如果各位目前使用的是Oracle,推荐各位使用方法二: 方法二容错率高,如果titles表里面有两条记录emp_no和from_date都是一样的,方法一就会报错了,单条子查询返回多行;...的记录,方法一只有一个最大或者最小可供选择。 ---- peace~

1.3K20

一条sql查询语句执行过程解析

查询缓存已key->value的形式存储在内存中,key为查询sql,value为查询的结果。 若有对一个表进行更新,那么这个表的所有查询缓存均会失效。因此,查询缓存弊往往大于利,不建议使用。...好在mysql提供了“按需使用”的方式,可将参数query_cache_type设置为DEMAND,这样对于默认的sql语句就不适用查询缓存,若指定语句想使用,可用SQL_CACHE显式指定 mysql...> select SQL_CACHE * from T where ID=10; 需要注意,mysql8.0版本直接将查询缓存整块功能删掉了。...因此,mysql8.0及之后版本均不在支持查询缓存。 分析器 作用:知道你要做什么 没有命中查询缓存,则开始真正执行语句了。mysql需要知道你要做什么,因此需要对sql语句做解析。...执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 这些接口都是引擎中已经定义好的。

59030

一条SQL查询语句是如何执行的?

2.1 查询缓存 如果我们两次都执行同一条查询指令,第二次的响应时间会不会比第一次的响应时间短一些?...SQL语句打碎成一个个单词,比如一条简单的SQL语句,会打碎成8个符号,每个符号是什么类型,从哪里开始到哪里结束。...2.2.3 预处理器 如果我们写了一条语法和词法都没有问题的SQL,但是字段名和表名却不存在,这个错误是在哪一个阶段爆出的呢? 词法解析和语法分析是无法知道数据库里有什么表,有哪些字段的。...MySQL作者担心我们写的SQL太垃圾,所以有设计出一个叫做查询优化器的东东,辅助我们提高查询效率。 2.3.1 什么是查询优化器? 一条 SQL语句是不是只有一种执行方式?...或者说数据库最终执行的 SQL是不是就是我们发送的 SQL? 不是。一条 SQL 语句是可以有很多种执行方式的,最终返回相同的结果,他们是等价的。

1.4K30

一条SQL查询语句是如何执行的?

本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。...可以将参数 query_cache_type 设置成 DEMAND,对于默认的 SQL 语句都将不使用查询缓存。...而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,如下: mysql> select SQL_CACHE * from user_info where id = 1; MySQL...分析器(Analyzer) 如果查询缓存未命中,就要开始执行语句了。首先,MySQL 需要对 SQL 语句进行解析。 分析器先会做词法分析。...执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 对于有索引的表,第一次调用的是取满足条件的第一行这个接口,之后循环取满足条件的下一行这个接口。

1.7K30

一条sql查询语句是如何执行的

本文通过一条sql语句来讲述mysql的基础架构 select * from jiuxiao_admin_log where user_id =1000; ?...好了现在我们大致了解了mysql的零件,那么现在我们将通过一条查询sql,从连接器到执行器来讲清楚每层作用。...你可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。...而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句一样 select SQL_CACHE * from T where ID=10; 分析器 如果没有命中查询缓存,就要开始真正执行语句了...首先,MySQL需要知道你要做什么,因此需要对SQL语句做解析。 MySQL从你输入的"select"这个关键字识别出来,这是一个查询语句。

1K20

笔记 | 一条SQL查询语句是如何执行的?

,只要有对一个表的更新,这个表上所有的查询缓存都会被清空所以,MySQL有这样的一个配置,你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存...而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定 mysql> select SQL_CACHE * from T where ID=10;注意:MySQL 8.0 版本直接将查询缓存的整块功能删掉了...,也就是说 8.0 开始彻底没有这个功能了#分析器分析器,是在没有命中缓存的情况下 开始分析sql语句1.分析器先会做“词法分析”MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句...同一条sql可以不同的拼接组合查询 但是每一种执行的效率时间都会有所不同 而优化器就是选择最优的组合去查询#执行器要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示...3.执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

1.1K101

深入理解SQL原理:一条SQL查询语句是如何执行的?

本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。...可以将参数 query_cache_type 设置成 DEMAND,对于默认的 SQL 语句都将不使用查询缓存。...而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,如下: mysql> select SQL_CACHE * from user_info where id = 1; MySQL...3.分析器(Analyzer) 如果查询缓存未命中,就要开始执行语句了。首先,MySQL 需要对 SQL 语句进行解析。 分析器先会做词法分析。...执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。 对于有索引的表,第一次调用的是取满足条件的第一行这个接口,之后循环取满足条件的下一行这个接口。

2.5K30

sql查询重复记录、删除重复记录具体方法

本篇文章重点为大家讲解一下sql查询重复记录、删除重复记录具体方法,有需要的小伙伴可以参考一下。... 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条) Select * From HZT Where ID In (Select Max(ID) From HZT Group... By Title) 注:此处显示ID最大一条记录 二、删除重复记录 1.删除全部重复记录(慎用) Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By... 重复字段 Having Count(*)>1) 2.保留一条记录 Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)...注:此处保留ID最大一条记录 删除多余的重复记录 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId

3.1K10
领券