首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏创作是最好的自我投资

    一条SQL语句的执行历程

    SQL执行历程在数据库管理系统中,每当你敲下一条SQL,按下执行键的时候,不管这条SQL是简单还是复杂,从按下执行键到返回数据结果展现出来这个过程都是一致的,每一步都有其存在的必要意义。 解析优化在正式执行 SQL 查询语句之前, MySQL 会先对 SQL 语句进行解析,解析包括词法解析,语法解析等,验证你执行的这条 SQL 可以被执行SQL执行那么经过解析优化之后,那么你的 SQL 就算进入执行状态了,接着就要进入执行 SQL 查询语句的流程了,每条SELECT 查询语句流程主要可以分为下面这三个阶段:预处理阶段、执行阶段,在这一阶段同样会执行优化 SQL 执行过程的剖析,整个过程包括一下SQL执行的全部历程信息在整个SQL 执行过程中,从你敲下SQL 点击【执行】命令的那一刻,SQL历程就开始了starting。 整个 SQL执行过程可以通过执行过程中涉及到的命令做一个详细的分析,感兴趣的可以自己尝试看看 SQL 执行过程。

    45320编辑于 2024-11-21
  • 来自专栏大数据

    hive执行引擎的发展历程

    一、历史与现状Hive的执行引擎经历了几个重要阶段:MapReduce时代(早期默认)最初,Hive将SQL语句转换为MapReduce作业来执行这是Hive的经典执行方式,但MapReduce执行速度较慢 Spark时代(现代选择)从Hive 1.1.0版本开始,Hive正式支持Apache Spark作为执行引擎这确实意味着Hive可以将SQL查询转换为Spark作业来执行Spark基于内存计算,通常比 使用Spark(现代,性能最优)SET hive.execution.engine=spark;二、技术架构对比# Hive on Spark的工作流程HiveQL (SQL) → Hive Driver (解析SQL) → Hive 优化器 (逻辑优化) → 物理执行计划 → Spark 转换器 (将计划转为Spark的RDD/DataFrame操作) → Spark Job (在YARN上运行) → 结果返回Hive# Hive on MapReduce的工作流程HiveQL (SQL) → Hive Driver → 优化器 → MapReduce

    26510编辑于 2025-12-11
  • 来自专栏鸿的学习笔记

    一条SQL生命历程

    1.一条SQL的诞生首先需要通过某种方式传递给数据库。 数据库会有一个客户端用来与外界交流,而作为提交SQL的一方,可以通过ODBC或者是JDBC协议直接将SQL提交给数据库,除此以外,还可以通过Web服务等第三方服务将SQL提交给数据库。 2.数据库接受SQL语句后,会根据现有的情况预先计算相应的算力,决定是不是应该立即执行这条SQL以及是否有足够的资源执行完这句SQL。一般这个任务被称为“Process Manager”。 3.当这条SQL获得相应的算力后,SQL就会开始进行计算了,首先会调用语句处理器,检查调用者是否有足够权限执行这条SQL,接下来编译这条SQL文本成内部执行计划。 内部执行计划会包含各种“算子”,例如聚合,投影,选择以及join。 4.在执行计划中会存在很多算子,这时需要一个事务处理器帮忙决定数据的增删改查。

    43740发布于 2018-08-06
  • 来自专栏DBA随笔

    一条SQL的心路历程

    一条SQL的心路历程 今天在极客时间上学习丁奇大佬的《MySQL 45讲》的时候,看到了一条高质量的评论,结合我自己的理解,将它分享出来。 当我们在客户端执行一条SQL的时候,例如: update table set a=a+1 where id=1; 此时在MySQL内部到底发生了哪些事情? 1.首先客户端通过TCP/IP协议发送一条update的SQL语句到Server层的SQL接口组件。该过程会经历连接的三次握手。 2.SQL 接口组件接到该请求后,先对该条语句进行解析,验证权限是否匹配,此处验证的是用户账号的权限。 4.接下来是优化器器生成相应的执行计划,优化器会对比多个执行计划,最后选择最优的执行计划 5.之后会是执行器根据执行计划执行这条语句。

    63210发布于 2020-05-18
  • 来自专栏不想当开发的产品不是好测试

    java 执行sql文件

    # 背景 用例执行完毕,期望回滚数据,因此希望执行sql来回滚数据 # 步骤 直接show代码,借助的是mybatis的ScriptRunner /** * 执行xx库下的表备份脚本 runner.setAutoCommit(true); String fileName = String.format("src/main/resources/db/%s.sql File file = new File(fileName); try { if (file.getName().endsWith(".sql

    3.1K80发布于 2018-04-10
  • 来自专栏算法channel

    SQL|语句执行逻辑

    01 SQL SQL,脚本查询语言,处理代码的顺序不是按照脚本语言的顺序,这点是不同于其他编程语言的最明显特征。 SQL语言常见的比如,Mysql,HiveQL,Oracle等,虽然语法上存在一些差异,但它们在解释查询脚本上,尤其是在解析语句执行顺序上具有共性。 如果将脚本语言分解为一系列的语句,那么这些语句的先后执行顺序是怎样的呢? 这篇文章,主要总结SQL语句的执行顺序。 02 Select语句执行顺序 select查询语句的执行顺序,可以看出首先执行FROM子句,最后执行ORDER BY 执行顺序: (1) FROM (2) ON (3) JOIN (4) WHERE FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,选择相对小的表做基础表。 ON:对VT1应用ON筛选器,只有那些使为真才被插入到VT2。

    4K80发布于 2018-04-02
  • 来自专栏python3

    python执行sql文件

    最近遇到一对需要执行sql文件,sql文件内是insert 语句。 但是实施人员给过来的sql文件,一张表的数据根据数据量硬生生生成了近10个文件。文件多了,若手动执行,很容易出现遗漏或者重复操作,造成错误。 由于文件内结构比较单一,故用脚本实现。 代码如下: def execute_sql(conn, cur, path=r"D:\个人"): """执行指定目录下的.sql文件""" os.chdir(path) for count = 1 # 当读取完毕文件,不到2000行时,也需对拼接的sql 执行、提交 if sql: cur.execute(sql) conn.commit() 以上execute_sql函数,会默认执行入参path路径下,所有文件名包含“.sql”文件。

    3.7K20发布于 2020-01-08
  • 来自专栏SQL实现

    SQL执行顺序

    了解 SQL执行顺序非常有价值,它可以让我们写出语法正确的 SQL,帮助我们简化编写新查询的过程。 本文将在 MySQL 的基础上,介绍查询语句的执行顺序。 : FROM / JOIN 和所有 ON 条件 WHERE GROUP BY HAVING SELECT ORDER BY LIMIT 以上是 SQL 标准定义的执行顺序。 比如下面这条 SQL ,看起来像是 SELECT 子句的别名被 GROUP BY 子句引用。 SELECT CONCAT(job, '|', deptno) AS job_dept, COUNT(*) FROM emp GROUP BY job_dept 那是不是说这条 SQL 破坏了前面定义的执行顺序呢 实际上并没有,MYSQL 会对这条 SQL 做重写,像这样: SELECT CONCAT(job, '|', deptno), COUNT(*) FROM emp GROUP BY CONCAT

    3.4K31发布于 2020-07-18
  • 来自专栏python3

    Python执行hive sql

    该python脚本是用于执行hive脚本的,需要设置hive的可执行环境变量,其实质转化为shell下命令 hive -e 'sql语句’ 的方式执行,然后把结果重定向到控制台显示。 注:由于该脚本是直接调用shell中的hive命令,所以需要在安装hive的服务器上执行。 使用前置条件:(1)安装hadoop和hive,并启动完hadoop;(2)已配置好hive的环境变量,确保在shell中能正常执行hive。 #! /usr/bin/python #-*-coding:utf-8 -*- import subprocess import traceback sql = """ # 书写hql脚本 ; """ cmd = 'hive -e """'+sql.replace('"', "\'")+'"""' print cmd try: p = subprocess.Popen(cmd, shell=True

    4.6K10发布于 2020-01-07
  • 来自专栏用户画像

    linux 执行.sql文件

    在MySQL下执行: source /home/jiangxingqi/DB/hello world.sql

    6.7K00发布于 2018-08-24
  • 来自专栏小工匠聊架构

    MySQL- SQL执行计划 & 统计SQL执行每阶段的耗时

    ---- 某些SQL查询为什么慢 要弄清楚这个问题,需要知道MySQL处理SQL请求的过程, 我们来看下 MySQL处理SQL请求的过程 客户端将SQL请求发送给服务器 服务器检查是否在缓存中是否命中该 SQL,未命中的话进入下一步 服务器进行SQL解析、预处理,再由优化器生成对应的执行计划 根据执行计划来,调用存储引擎API来查询数据 将结果返回给客户端 ---- 查询缓存对SQL性能的影响 query_cache_type 预处理及生成执行计划 接着上一步说,查询缓存未启用,或者 未命中查询缓存 , 服务器进行SQL解析、预处理,再由优化器生成对应的执行计划 。 MySQL会依赖这个执行计划和存储引擎进行交互 . 包括以下过程 语法解析: 包含语法等解析校验 预处理 : 检查语法是否合法等 执行计划: 上面都通过了,会生成执行计划。 ---- 造成MySQL生成错误的执行计划的原因 存储引擎提供的统计信息不准确 执行计划中的估算不等同于实际的执行计划的成本 MySQL不考虑并发的查询 MySQL有时候会基于一些特定的规则来生成执行计划

    3.8K20发布于 2021-08-17
  • 来自专栏IT码农

    Yii2 SqlDataProvider 原生sql 执行sql

    =:status ', [':status' => 1])->queryScalar(); $dataProvider = new SqlDataProvider([ 'sql

    1.4K31发布于 2019-09-29
  • 来自专栏技术赋能学术

    Sql Server 查询正在执行sql信息

    sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid CROSS APPLY sys.dm_exec_sql_text (er.sql_handle) AS qt WHERE session_Id > 50 /* Ignore system spids.*/ AND session_Id NOT IN (@@SPID

    5.4K30发布于 2021-01-08
  • 来自专栏DOTNET

    Entity Framework——执行sql语句

    EF版本:6.0.0 EF对大量数据或多表连接一次操作耗时较大,或要求响应时间尽可能小,因此采用EF框架执行SQL语句的方案 1DbContext.Database 这个类包含了大量的操作方法,见截图: 查询方法举例: using (CustomDbContext db = new CustomDbContext()) { string sql = "delete from collectionusers where Id=@id"; var num = db.Database.ExecuteSqlCommand(sql stored 更新方法举例: using (CustomDbContext db = new CustomDbContext()) { string sql `User_Id`)VALUES(@insertTime,@cid, @uid)"; var num = db.Database.ExecuteSqlCommand(sql

    4.3K70发布于 2018-03-08
  • 来自专栏知无不言 - 畅所欲言

    MySQL 8.0 SQL 执行流程

    MySQL 8.0 SQL 执行流程首先我们先来看下 MySQL 的经典架构图,8.0 的没怎么翻到,先看看这个了。 Optimzer优化器,将 SQL 进行优化生成多个执行计划。执行器上面优化器生成了多份执行计划后,接下来就由执行器选择一份计划执行了。 执行器先会判断当前是否具有权限,然后才会去执行相应的 SQL 语句。Caches缓存命中,8.0 中已经被干掉了。 比如他是将 SQL 语句作为 key 进行命中匹配的,如果 SQL 中多加了一个空格也会被认为不是同一条 SQL 导致匹配不到。Pluggable storage Engines数据库的执行引擎插件。 SQL 执行流程SQL 流程是 SQL --> 解析器 --> 优化器 --> 执行器 --> 返回结果。下面会将各个组件单独拉出来做分析。

    83440编辑于 2023-11-20
  • 来自专栏Jed的技术阶梯

    SQL 语句的执行顺序

    SELECT id, COUNT(client) AS count FROM table1 GROUP BY id WHERE count > 1; 答案是不能,执行SQL 会报错: [Err] 1064 for the right syntax to use near 'WHERE count > 1' at line 4 原因: WHERE 子句会比 SELECT 子句先执行,上面的 SQL 中 , 当 WHERE 子句被执行时,count 这个值尚不存在。 SQL 语句的书写顺序如下: SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY SQL 语句的执行顺序如下: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 其中 SELECT 和 FROM 是必须的,其他关键词是可选的,这六个关键词的执行顺序 与SQL语句的书写顺序并不是一样的

    4.4K41发布于 2018-12-28
  • 来自专栏FHADMIN

    Mybatis 动态执行SQL语句

    有很多的接口都只是执行SQL查询之后就直接返回给前端,那么我们能不能把这些SQL保存在数据库中,调用一个固定的接口就能根据传参查询出想要的数据呢? 调用直接传入SQL语句(可以选择存数据库)和参数,SQL语句写法和在XML内的写法保持一致即可,包括Mybatis标签等等,参数选择使用通用的Map,可以从接口接收任何参数,方法的返回值是List<Map Configuration baseConfig = sqlSessionFactory.getConfiguration(); // 不能使用原有的config对象加载,否则下次就不会重复加载导致传入的SQL

    2.4K20发布于 2021-07-29
  • 来自专栏全栈程序员必看

    linux定时执行sql文件

    root pass="123456" db=test tablename=ts mysql -u$user -p$pass -D $db < /usr/local/crontab/sqlFile/test.sql

    8.1K10编辑于 2022-08-09
  • 来自专栏PHP在线

    SQL语句执行过程详解

    一条sql,plsql的执行到底是怎样执行的呢? 一、SQL语句执行原理: 第一步:客户端把语句发给服务器端执行 当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的 进程来处理这语句。 当服务器进程的优化器确定这条查询语句的最佳执行计划后,就会将这条 SQL 语句与执行计划保存到数据高速缓存(library cache)。 如此的话,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行 SQL 语句,提高 SQL 语句处理效率。 第三步:语句执行 语句解析只是对 SQL 语句的语法进行解析,以确保服务器能够知道这条语句到底表达的是什么意思。等到语句解析完成之后,数据库服务器进程才会真正的执行这条 SQL 语句。

    4.7K60发布于 2018-03-08
  • 来自专栏全栈程序员必看

    使用PreparedStatement执行sql语句

    表示一个参数的占位符 //3.执行预编译sql语句(检查语法) preStmt = conn.prepareStatement(sql); /** * 4.设置参数 * 参数1:参数位置 从1 表示一个参数的占位符 //3.执行预编译sql语句(检查语法) preStmt = conn.prepareStatement(sql); /** * 4.设置参数 * 参数1:参数位置 从1 表示一个参数的占位符 //3.执行预编译sql语句(检查语法) preStmt = conn.prepareStatement(sql); /** * 4.设置参数 * 参数1:参数位置 从1 = JdbcUtil.getConnection(); //2.准备预编译的sql语句 String sql = "select * from employee"; //3.执行预编译sql语句 (检查语法) preStmt = conn.prepareStatement(sql); //4.无参数,则直接执行sql rs = preStmt.executeQuery(); while(

    2.3K20编辑于 2022-09-07
领券