Oracle教程学习之面试题03_阿里巴巴Oracle面试题01-性能优化
一、说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
风哥Oracle教程简单指示:默认的索引是b-tree。
对insert的影响:分裂,要保证tree的平衡。
对delete的影响:删除行的时候要标记改节点为删除。
对update的影响:如果更新表中的索引字段,则要相应的更新索引中的键值。查询中包含索引字段的键值和行的物理地址。
二、不借助第三方工具,怎样查看sql的执行计划?
风哥Oracle教程简单指示:
sqlplus
set autotrace ...
utlxplan.sql 创建 plan_table 表
...
三、如何使用CBO,CBO与RULE的区别?
风哥Oracle教程简单指示:在初始化参数里面设置 optimizer_mode=choose/all_rows/first_row 等可以使用 cbo。
rbo会选择不合适的索引,cbo需要统计信息。
四、存在表T(a,b,c,d),要根据字段c排序后取第21-30条记录显示,请给出sql:
风哥Oracle教程简单指示:
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c) a )where rn between 21 and 30;
五、如何定位重要(消耗资源多)的SQL?
风哥Oracle教程简单指示:根据v$sqlarea 中的逻辑读/disk_read。以及寻找CPU使用过量的session,查出当前session的当前SQL语句,或者:监控WIN平台Oracle的运行
六、如何跟踪某个session的SQL?
风哥Oracle教程简单指示:先找出对应的'sid,serial',然后调用system_system.set_sql_trace_in_session(sid,serial,true);参考:跟踪某个会话
七、SQL调整最关注的是什么?
风哥Oracle教程简单指示:逻辑读。IO量
八、列举几种表连接方式
风哥Oracle教程简单指示:merge join,hash join,nested loop
九、使用索引查询一定能提高查询的性能吗?为什么?
风哥Oracle教程简单指示:不能。如果返回的行数目较大,使用全表扫描的性能较好。
十、绑定变量是什么?绑定变量有什么优缺点?
风哥Oracle教程简单指示:绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的语句的解析。
十一、如何稳定(固定)执行计划?
风哥Oracle教程简单指示:使用stored outline,profile,spm。