首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【DB笔试面试575】OracleSQL语句的执行过程有哪些?

♣ 题目部分 OracleSQL语句的执行过程有哪些? ♣ 答案部分 Oracle数据库里SQL语句的执行过程可以如下图所示: ?...查询转换过程Oracle会根据一些规则来决定是否对目标SQL执行查询转换,这些规则在Oracle不同的版本里不尽相同。...Oracle 9i,查询转换是独立于优化器的,它与优化器的类型无关,但是从Oracle 10g开始,Oracle会对某些类型的查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换的等价改写...只有当等价改写SQL的成本值小于未经过查询转换的原始SQL的成本值时,Oracle才会对目标SQL执行查询转换。执行完查询转换,原目标SQL可能就被Oracle改写了,当然也有可能没有改写。...(5)得到了目标SQL执行计划,接下来Oracle就会根据执行计划去实际执行SQL,并将执行结果返回给用户。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

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

一条更新SQLMySQL数据库是如何执行

点击关注"故里学Java" 右上角"设为星标"好文章不错过 前边的《一条SQL查询MySQL是怎么执行的》我们已经介绍了执行过程涉及的处理模块,包括连接器、分析器、优化器、执行器、存储引擎等。...首先,执行语句前要先连接数据库,这是第一步连接器的工作,前面我们也说过,当一个表有更新的时候,跟这个表有关的查询缓存都会失效,所以我们一般不建议使用查询缓存。...接下来,分析器会经过语法分析和词法分析,知道了这是一条更新语句,优化器决定要使用哪一个索引,然后执行器负责具体的执行,先找到这一行,然后做更新。...> update table demo set c = c + 1 where ID = 2; 接下来我们来看看update语句的执行流程,图中浅色框表示存储引擎执行的,深色框代表的是执行执行的...我们这里也借助上边的例子看一下,假设当前ID=2的这一行值为0 ,update的过程写完了第一个日志,第二个日志还没写期间发生了crash,会怎么样? 先写redolog写binlog。

3.8K30

【DB笔试面试603】Oracle,固定SQL执行计划的方法有哪些?

♣ 题目部分 Oracle,固定SQL执行计划的方法有哪些?...♣ 答案部分 实际项目中,通常在开发环境下,一些SQL执行没有任何功能问题,而当到了生产环境或生产环境的数据量发生较大的变量时,其SQL执行效率非常低。...此时如果更改SQL,那么可能需要重新修改源程序以及重新编译程序。如果修改源程序的成本比较大,那么可以使用一些方法不改变源应用程序的情况下更改特定SQL执行计划并固定下来。...因为SQL语句的执行计划发生更改时,可能存在性能风险。SQL计划发生更改的原因有很多,如优化程序版本、优化程序统计信息、优化程序参数、方案定义、系统设计和SQL概要文件创建等。...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

67620

【DB笔试面试584】Oracle,如何得到已执行的目标SQL的绑定变量的值?

♣ 题目部分 Oracle,如何得到已执行的目标SQL的绑定变量的值?...♣ 答案部分 当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL的绑定变量的具体输入值就会被Oracle捕获: l 当含有绑定变量的目标SQL以硬解析的方式被执行时...l 当含有绑定变量的目标SQL以软解析或软软解析的方式重复执行时,Oracle默认情况下至少得间隔15分钟才会捕获一次。...只会捕获那些位于目标SQL的WHERE条件的绑定变量的具体输入值,而对于那些使用了绑定变量的INSERT语句,不管该INSERT语句是否是以硬解析的方式执行Oracle始终不会捕获INSERT语句的...查询视图V$SQL_BIND_CAPTURE或V$SQL可以得到已执行目标SQL绑定变量的具体输入值。

3K40

Hibernate第二天:Hibernate的一级缓存、其他的API

2.1.2代理主键 代理主键,主键的本身不是表必须的一个字段(不是实体的某个具体属性)。 创建一个人员表,没有使用人员的身份证号,用了一个与这个表不相关的字段ID,(PNO)。...2.2主键生成策略 实际开发,一般不允许用户手动设置主键,一般将主键交给数据库,或者手动编写程序进行设置。Hibernate为了减少程序编写,提供了很多主键生成策略。...(持久化类的持久态对象,可以自动更新数据库) (3)脱管态(Detached):有唯一标识OID,没有被Session管理。...脱管态转换为瞬时态,将脱管态对象的持久化标识OID设置为null 持久化类持久态对象自动更新数据库 @Test /**** * 持久太的对象可以以自动更新数据库...MySQL数据库,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库,只支持Serializable(串行化)级别和Read committed (

67641

ClickHouse性能优化?试试物化视图

传统关系型数据库Oracle、PostgreSQL、SQL Server等都支持物化视图,而作为MPP数据库的ClickHouse也支持该特性。...三、ClickHouse物化视图 ClickHouse的物化视图可以挂接在任意引擎的基础表上,而且会自动更新数据,它可以借助 MergeTree 家族引擎(SummingMergeTree、Aggregatingmergetree...(SummingMergeTree引擎)的时候,也需要按照聚合查询来写sql,因为虽然 SummingMergeTree 会自己预聚合,但是并不是实时的,具体执行聚合的时机并 「不可控」。...总结 创建 MV 表时,一定要使用 TO 关键字为 MV 表指定存储位置,否则不支持 「嵌套视图」(多个物化视图继续聚合一个新的视图) 创建 MV 表时如果用到了多表联查,不能为连接表指定别名,如果多个连接表存在同名字段...MV 表建好之后将数据手动导入 MV 表 使用 MV 的聚合引擎时,也需要按照聚合查询来写sql,因为聚合时机不可控

3K40

goldengate同步无主键无唯一索引表的问题以及解决方案--更新关于附加日志

--检查源和目标数据完全一致的.对于源端5条更新目标更新都加上rownum=1来保证每次都更新一条.对logdump类型是GGSPKUpdate. ?...通过打印SQL,目标端执行如下更新,set和where都加上所有列且where后面加上rownum=1来保证每次更新都是一条. UPDATE "XIAOXU"."...); alter table xiaoxu.txiaoxu add (addresss clob); --重启抽取进程以及应用进程 --验证附加日志,发现附加日志并自动更新,需要重新删除再增加,否则会造成...分为2种情况,1种是超过32列时,增加附加自动all columns,2种sql命令手动指定all columns来实现(列小于32也没有问题,取消超过32列限制),11版本的oggggsci窗口还没有...,原来有值,更新其他字段时,会造成这个字段目标被更新成NULL,这个是不规范造成,从而造成后续数据不一致,出现常见错误1403错误. c:如果增加、删除、修改的是大字段类型的列,例如clob,这个列无法增加附加日志

1.9K30

kettle学习笔记(五)——kettle输出步骤

一、概述   数据库表:     • 表输出     • 更新,删除,插入/更新     • 批量加载(mysql,oracle)     • 数据同步   文件:     • SQL 文件输出     ...字段映射:     使用猜一猜可以进行名称匹配,如果需要手动匹配,可以左右分别选择,点击Add即可!     并且映射完成之后也可以删除丢弃某些字段 ?...4.其它操作——删除、更新、插入更新     删除:       根据关键字匹配,删除数据库已有的数据。     更新:       根据关键字匹配,更新数据库已有的数据。     ...根据一个flag字段执行相应的插入/更新/删除操作。     配置图如下:使用合并的flag字段(可能有new deleteed等flag),后续再根据此flag,同步变化的数据到表1 ?  ...MySQL批量加载需要在Linux环境运行(有命令只能在Linux下运行)   Oracle需要本地有oracle客户端(sqlldr文件,Oracle安装目录下查找) 三、文件输出 1.SQL文件输出

2.9K30

MySQL系列之日期和时间类型笔记

,可以设置TIMESTAMP类型的列,自动更新时间为当前时间 列为TIMESTAMP的日期类型可以设置一个默认值,而DATETIME不支持 例子,验证一下,设置默认值和自动更新时间 # 新增一张表 CREATE...# 修改字段自动更新(数据有改变时候才会自动更新) ALTER TABLE t MODIFY COLUMN b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; # 删一下表数据...,可以对比得知,NOW、CURRENT_TIMESTAMP其实获取的都是整条sql开始执行的时间,不管sleep函数执行前后,而SYSDATE获取的其实执行sysdate这个函数时候的时间,并非整条sql...开始执行的时间,所以sleep函数执行前后获取的时间是不同的 DATE_ADD和DATE_SUB函数 DATE_ADD(date , INTERVAL expr type)和DATE_SUB(datte...的to_char功能有点类型,作用是按照用户定义的格式打印数据 SELECT DATE_FORMAT(NOW(),'%Y%m%d');

1.2K20

MySQL日期和时间类型笔记

写法是type(size),size为小数部分精度,最大为6 # 删表,再验证一下 DROP TABLE t; # 这里指定精度 CREATE TABLE t (a DATETIME(4)); # 秒加小数...,可以设置TIMESTAMP类型的列,自动更新时间为当前时间 列为TIMESTAMP的日期类型可以设置一个默认值,而DATETIME不支持 例子,验证一下,设置默认值和自动更新时间 # 新增一张表 CREATE...验证自动更新时间问题 # 修改字段自动更新(数据有改变时候才会自动更新) ALTER TABLE t MODIFY COLUMN b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP...sql开始执行的时间,不管sleep函数执行前后,而SYSDATE获取的其实执行sysdate这个函数时候的时间,并非整条sql开始执行的时间,所以sleep函数执行前后获取的时间是不同的 DATE_ADD...DATE_FORMAT函数 DATE_FROMAT和Oracle的to_char功能有点类型,作用是按照用户定义的格式打印数据 SELECT DATE_FORMAT(NOW(),'%Y%m%d');

1.8K10

MySQL 统计信息简介

MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。...查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息以下情况会被自动更新...持久化统计信息以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...三、统计信息不准确的处理 我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理: 1、手动更新统计信息,注意执行过程中会加读锁:

2.1K10

plsql 触发器教程-当表1的某条数据更新时,表2的某些数据也自动更新

触发器-update 需求:一张表的某个字段跟随另一张表的某个字段的值更新更新 2张表 test001表 ? test002表: ?...新建触发器,当更新test001的D为某个值x时,test002的D(不一定是D,也可以是C)也变成x 例如:update test001 t1 set D='7'where t1.A='1';...当我手动更新test001表 a字段为1的那条记录 ,把d更新为7时,那么要使test002表a字段也为1的那条记录,自动更新为7, 那么触发器可以这样写: create or replace...set t2.d = :new.d where exists (select * from test002where t2.a=:new.a); end test02Tr; 需要注意的地方 :new.字段表示的是执行完某个更新操作的那条数据记录...错误sql: create or replace trigger Test02Tr after update of don test001 for each row begin update test002

1.3K10

MySQL统计信息简介

SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。...查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息以下情况会被自动更新...持久化统计信息以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...三、统计信息不准确的处理 我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理: 1、手动更新统计信息,注意执行过程中会加读锁:

2.5K20
领券