数据库程序员面试分类真题14.docx
《数据库程序员面试分类真题14.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题14.docx(24页珍藏版)》请在优知文库上搜索。
1、数据库程序员面试分类真题14倚答题1. SQ1.语句的执行过程有哪些?正确答案:Oracle数据库里SQ1.语句的执行过程可以如卜图所示。在上图中,可以看到SQ1.语句的执行过程大致分为以卜几个步骤:1)当用户提交待执行的目标SQ1.后,Oracle首先会对目标SQ1.进行解析。在这个过程中,OraCIe会先执行对目标SQ1.的语法、语义和权限的检查:语法检查(SyntaXCheCk)是检查目标SQ1.的拼写是否正确,例如,错将关键字“FRO字写成“FORM”,将SE1.ECT”写成“SE1.字”等。语义检查(SemantiCCheCk)是检查SQ1.语句中的访问对象是否存在及该用户是否具备相
2、应的权限。2)如果目标SQ1.不能通过上述语法、语义和权限的检查,那么该目标SQ1.将解析失败。如果目标SQ1.能通过上述检杳,那么接下来OraCIe就会去SGA的共享池中的库缓存中查找是否存在匹配的共享游标。如果找到了匹配的共享游标,那么Oracle就会把存储于该共享游标中的解析树和执行计划直接拿过来重用,这相当于跳过了后续的“查询转换”和“查询优化”这两个步骤,直接进入“实际执行”阶段。3)如果找不到匹配的共享游标,就意味着此时没有可以被重用的解析树和执行计划,那么接下来整个执行过程就进入查询转换这一步。在查询转换过程中,OraCIe会根据一些规则来决定是否对目标SQ1.执行查询转换,这些
3、规则在OraCIe不同的版本里不尽相同。在OraCle9i中,查询转换是独立于优化器的,它与优化器的类型无关,但是从OraeleIog开始,Oracle会对某些类型的查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换后的等价改写SQ1.的成本和原始SQ1.的成本。只有当等价改写后SQ1.的成本值小于未经过查询转换的原始SQ1.的成本值时,OraCIe才会对目标SQ1.执行查询转换。在执行完查询转换后,原目标SQ1.可能就被OraClC改写了,当然也有可能没有改写O4)接下来,OraCIe就正式进入了查询优化这个步骤。在这个步骤里,Oracle会根据不同的优化器类型(CBo或RBO)
4、采用不同的判断原则,从执行完查询转换后得到的目标SQ1.的诸多可能的执行路径中选择一条效率最高的路径来作为其执行计划,即查询优化的输入就是执行完查询转换后得到的等价改写SQ1.,其输出就是该目标SQ1.的最终执行计划。5)在得到了目标SQ1.的执行计划后,接下来OraeIe就会根据执行计划去实际执行该SQ1.,并将执行结果返回给用户。考点游标2. 绑定变量的适用场合有哪些?正确答案:对于绑定变量应该根据系统的类型来决定是否使用绑定变量,具体如下:1)在高并发的O1.TP系统中,SQ1.语句肃宜执行频度高,但处理的数据量较少,结果集也相对较小,尤其是使用表上的索引来缩小中间结果集,其解析时间通常
5、会接近或高于执行时间,因此,在该场合一定要使用绑定变量,并且最好是使用批量绑定,因为这样可以有效降低系统硬解析的数量,这也是O1.TP类型的系统在数据库端具备良好的性能和可扩展性的前提条件。2)在O1.AP/DSS系统中,SQ1.语句执行次数相对较少,但返回的数据量较大,其SQ1.语句执行时间远高于其解析时间,硬解析对系统性能的影响是微乎其微的,因此,使用绑定变量对于总的执行时间影响不大,对系统性能的提升也非常有限。3)对于O1.AP和O1.TP混合型的应用系统,如果有循环,不管这个循环是在前台代码还是在后台P1./SQ1.代码中,循环内部的SQ1.语句一定要使用绑定变量,并且最好是使用批量绑
6、定;至于循环外部的SQ1.语句,可以不使用绑定变量O需要注意的是,对于实际的数据库对象,例如表、视图等,不能使用绑定变量替换,只能替换字面量。如果对象名是在运行时生成的,那么需要对其用字符串拼接,同时,SQ1.只会匹配已经在共享池中存在且相同的对象名。考点绑定变量3. 什么是绑定变量娅探?正确答窠:目标SQ1.若不使用绑定变量,则当具体输入值一旦发生了变化,目标SQ1.的SQ1.文本就会随之发生变化,这样OraCIe就能很容易地计算出对应Selectivity和CardinaIily的值,进而据此来选择执行计划。但对于使用了绑定变量的目标SQ1.而言,情况就完全不一样了,因为现在无论对应绑定变
7、量的具体输入值是什么,目标SQ1.的SQ1.文本都是一模一样的。对于使用了绑定变量的目标SQ1.而言,Oracle可以选择如下两种方法来决定其执行计划:D使用绑定变量窥探(BindPeeking),2)如果不使用绑定变量窥探,那么对于那些可选择率可能会随着具体输入值的不同而不同的谓词条件使用默认的可选择率(例如5蛤。绑定变量窥探是在OraCIe9i中引入的,是否启用绑定变量窥探受隐含参数“OPTIMPEEKUSERBINDS的控制,该参数的默认值是TRUE,表示在Oracle9i及其后续的版本中,默认启用绑定变量婉探。考点绑定变量4. 如何得到已执行的目标SQ1.中的绑定变量的值?正确答窠:当
8、Oracle解析和执行含有绑定变量的目标SQ1.时,如果满足如下两个条件之一,那么该SQ1.中的绑定变量的具体输入值就会被Oracle捕获:1)当含有绑定变量的目标SQ1.以硬解析的方式被执行时。2)当含有绑定变量的目标SQ1.以软解析或软软解析的方式重熨执行时,OraCle在默认情况卜至少得间隔15nin才会捕获一次。这个15nin受隐含参数“CURSORBINDCAPTUREINTERVA1.控制,默认值为900s,即15min0需要注意的是,Oracle只会捕获那些位于目标SQ1.的WHERE条件中的绑定变量的具体输入值,而对于那些使用了绑定变量的INSERT语句,不管该INSERT语句
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 程序员 面试 分类 14
