OBCP第三章 SQL引擎高级技术-DML语句处理

简介: OBCP第三章 SQL引擎高级技术-DML语句处理

DML语句处理

数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心


DML的主要功能即是访问数据,因此其语法都是以读取与写入数据库为主,除了INSERT以外,其他指令都可能需搭配WHERE指令来过滤数据范围,或是不加WHERE指令来访问全部的数据


数据库还支持REPLACE和INSERT INTO...ON DUPLICATED KEY UPDATE两种DML语句


所有的 DML 语句都会生成对应的执行计划来进行数据的读写操作,每一种 DML 语句都会生成一种对应的 DML 算 子。DML 算子负责读取数据,并通过存储层提供的数据写入接口将 DML 语句涉及到的数据写入存储引擎中

DML语句处理-INSERT执行计划示例

对于INSERT/REPLACE语句而言,由于其不用读取表中的已有数据,因此,INSERT语句的执行计划相对简单,其执行 计划为简单的EXPR VALUES+INSERT OP算子构成:

DML语句处理-UPDATE执行计划示例

对于UPDATE或者DELETE语句而言,优化器会通过代价模型对WHERE条件进行访问路径的选择,或者ORDER BY数据 顺序的选择:


DML语句处理-DELETE执行计划示例

对于UPDATE或者DELETE语句而言,优化器会通过代价模型对WHERE条件进行访问路径的选择,或者ORDER BY数据顺序的选择:

DML语句处理-一致性校验

DML操作的表对象每一列都有相关的约束性定义,例如列的NOT NULL约束,UNIQUE KEY约束等。为保证写入数据的类型同 Schema 中列定义的类型保持一致,在 DML语句最终写入数据前需要进行如下操作:


1.对列的 NOT NULL、UNIQUE KEY 约束检查


2. 对写入数据进行类型转换


约束性检查失败,需要回滚该DML语句写入的脏数据

DML语句处理-锁管理

加锁时机 -通过MVCC和锁结合的机制


只有行锁,没有表锁;在线DDL,不中断DML

尽量避免大量DML语句对同一行进行频繁的并发读写

热点行:可以使用SELECT...FOR UPDATE先对该行加锁,然后再执行DML操作

加锁顺序


DML会级联的同步更新数据表中的数据和索引表中的数据


local index 和 单表 global index,绑定


分区表global index,完全独立


相关文章
|
4月前
|
SQL 存储 分布式计算
统一sql引擎Quicksql
统一sql引擎Quicksql
|
5月前
|
SQL 消息中间件 Apache
Apache Calcite—sql执行和解析引擎
Apache Calcite—sql执行和解析引擎
61 0
|
18天前
|
SQL 运维 监控
面经:Presto/Trino高性能SQL查询引擎解析
【4月更文挑战第10天】本文深入探讨了大数据查询引擎Trino(现称Trino)的核心特性与应用场景,适合面试准备。重点包括:Trino的分布式架构(Coordinator与Worker节点)、连接器与数据源交互、查询优化(CBO、动态过滤)及性能调优、容错与运维实践。通过实例代码展示如何解释查询计划、创建自定义连接器以及查看查询的I/O预期。理解这些知识点将有助于在面试中脱颖而出,并在实际工作中高效处理数据分析任务。
50 12
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
【MySQL技术之旅】(7)总结和盘点优化方案系列之常用SQL的优化
71 1
|
3月前
|
SQL
14、sql注入绕过技术
14、sql注入绕过技术
28 0
|
3月前
|
SQL
小课堂 -- sql注入绕过技术
小课堂 -- sql注入绕过技术
87 0
|
4月前
|
SQL 缓存 Java
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
64 0
JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
|
4月前
|
SQL Java 关系型数据库
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
33 0
|
5月前
|
SQL 分布式计算 Java
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)
47 0
|
5月前
|
SQL 关系型数据库 MySQL
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
Presto【基础 01】简介+架构+数据源+数据模型+特点(一篇即可入门支持到PB字节的分布式SQL查询引擎Presto)
59 0