事务处理与SQL查询
文章目录
- 事物处理
- 概念
- DBMS数据存取处理过程
- SQL查询处理过程
- 查询优化
- 基于代价的优化
- 启发式优化准则
事物处理
概念
事务 :完成一个业务逻辑所涉及的一组具有ACID特性的数据库操作。
事务管理器( Transaction Manager ):负责对数据库的改变记录日志,以支持系统崩溃后的恢复。
并发控制器: 保障事务的并发执行,以支持多用户访问。
ACID特性:
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。- 一致性(Consistency)
事务前后数据的完整性必须保持一致。- 隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。- 持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
DBMS数据存取处理过程
- APP向DBMS发出访问数据库的命令,其中包含关系名和查询条件;
- DBMS读取数据字典,检查是否存在该关系和相应字段,并对该命令进行语法和用户权限检查。如果检查通过,则执行该命令,否则拒绝并返回出错信息;
- 执行该命令时,首先根据数据字典中的定义将命令中的外模式映射到模式,确定应该读取哪些记录;
- 根据数据字典中的定义信息,将模式映射到内模式,确定应该读入哪些物理记录及有关的地址信息;
- DBMS向操作系统OS发送读取该记录的命令;
- OS执行读取数据的有关操作,从指定地址读取记录并存入系统缓冲区;
- DBMS将系统缓冲区中的数据转换为模式并进而转换为外模式;
- DBMS将系统缓冲区外模式形式的记录返回给应用程序;
- DBMS将运行情况登记在运行日志中;
- DBMS将命令执行状态返回应用程序;
- 若应用程序中的命令需读取多条记录,则反复执行4-10步。
SQL查询处理过程
- 查询分析和词法、语法解析、语义检查 、约束检查
- 将 SQL 查询转换为关系代数,选择逻辑查询计划
- 选择物理查询计划,在物理查询计划中指明运算的具体顺序和用于实现每一个运算的算法
逻辑查询计划:是一个代数表达式,表示要在数据上执行的若干个具体运算以及有关运算顺序。
查询处理的步骤:
- 语法分析与翻译
- 扫描、识别SQL语句,词法、语法解析,判断是否符合SQL语法规则
- 关系名是否存在,一些约束检查
- SQL转换为内部表示式(语法分析树、关系代数表达式)
- 优化
- 选择一个高效的查询执行计划(选择依据:代价的高低)
- 执行
- 按计划执行,并输出结果
查询优化
一个查询有多个表达方式:如 σsalary<75000(Πsalary(instructor))\sigma_{salary< 75000} (\Pi _{salary} (instructor))σsalary<75000(Πsalary(instructor)) 和 Πsalary(σsalary<75000(instructor))\Pi _{salary}(\sigma_{salary< 75000} (instructor))Πsalary(σsalary<75000(instructor))
每一个关系代数运算通常有多种计算方法(执行计划),不同的执行计划有不同的代价。
从所有等价的执行计划中选择代价最小的一个。
- 基于代价的优化
- 启发式优化
基于代价的优化
代价是利用数据库目录(catalog )中的统计信息估算而得的,如:每个关系中的元组数,每个元组的长度,等等。
关键问题:如何度量查询代价、执行关系代数运算的算法、如何进行单元运算的组合,以实现整个表达式计算、如何优化查询,即如何找到代价最小的查询执行计划。
代价估算:
大型数据库系统中,最主要的代价是磁盘存取代价包括:平均寻道代价,平均读块代价,平均写块代价
为简单起见 ,只考虑磁盘块的传输时间和搜索时间:tr
– 传输时间 ts
– 搜索时间
S
次寻道和 b
个磁盘块传输 的代价为:b * tr+ S * ts
忽略:
- CPU 代价
- 将最终结果写回磁盘 的代价
- 数据已在缓冲区
笛卡尔积
选择
使用索引的选择
涉及比较的选择
投影
排序
嵌套循环连接
索引连接
散列连接
归并连接
启发式优化准则
- 选择和投影尽早执行(选择 、投影)
- 执行连接之前关系进行预处理(index、sort)
- 某些选择 + 笛卡尔积 => 连接
- 将常用查询的优化结果(执行计划)存于系统中
事务处理与SQL查询相关推荐
- Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
创建数据库 用"数据库配置助手"创建数据库 创建数据库 选择 普通用途 输入名字,SID 在此我们选择专用服务器模式 典型 参数 含义 [最大并发连接用户数]文本框设置要在任意给定 ...
- 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的
文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...
- django 1.8 官方文档翻译: 2-5-2 进行原始的sql查询
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...
- SQL查询语句大全(转)
转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/detai ...
- (转)经典SQL查询语句大全
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- 大数据的分布式SQL查询引擎 -- Presto的详细使用
Presto – Distributed SQL Query Engine for Big Data 官网 项目源码 官方文档 目录 1 Presto 概述 2 概念 2.1 服务进程 2.2 数据源 ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- sql查询返回xml数据之应用【转载】
sql查询返回xml数据之应用[转载] 今天查看邮件,看到一标题Using the FOR XML Clause to Return Query Results as XML,点进去看了看,以前也是知 ...
- python查询sqlserver视图_基于odoo11上的SQL查询构建一个新的视图或模型
我正在研究一个奥多模块.在 我希望我的模块是一个"报告"大多数购买的产品(按客户).在 我已经在Odoo上创建了一个视图,但是现在,我需要按客户"过滤"这些视图 ...
最新文章
- grep与正则表达式
- 测试工具/PostMan
- c语言远控,CC远控工具:WebSocket C2
- UVA10150 POJ2647 Doublets【BFS】
- 程序员揭秘 一些鲜为人知的编程真相
- php imap gmail,php,imap,gmail和dreaded无法连接到'{imap.gmail.com:993 / imap / ssl}'
- html的各种标签详解
- 高级程序员的思维模式
- 雅诗兰黛公司将收购Dr. Jart+
- 能量原理与变分法笔记02:变分问题 变分和微分运算能交换次序 欧拉方程
- android ping网络连接服务器失败,Android 中网络连接检测和使用ping检测网络是否可访问...
- 基于深度学习的红外和可见光图像融合论文及代码整理
- 在docker容器中创建用户组和用户,并且多用户共用一个anaconda环境
- 服务器系统总是蓝屏,Windows 2012R2 服务器频繁蓝屏
- ssm+java农村快递代取平台52wxh(程序+lw+源码+远程部署)
- 城域网IPv6过渡技术——MAP技术
- 求1!+2!+3!+…+n!(2种方式)
- Linuxptp在arm平台的移植与测试
- 2020年长沙四大名校高考成绩统计
- JavaEE项目开发
热门文章
- php5.6代码转换7.1,通过PHP5.6源代码在WINDOWS 7下进行编译生成(最详细步骤)
- mysql报tns无监听_oracle提示TNS:无监听程序的解决办法
- ct与x光的哪个辐射大_ct和x光哪个辐射大
- 10右键闪退到桌面_windows7多用户远程桌面如何设置
- Python中变量的本质探索
- python入门-windows下anaconda环境搭建
- systemctl自定义service
- 构建高性能WEB站点笔记二
- bzoj1500: [NOI2005]维修数列
- TextBlock or Label?