📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


01 Oracle数据库的分页操作

对于Oracle数据库的分页查询语句一般采用如下的方式:

02 Oracle数据库的分页操作的性能分析和调优

按照分页操作的SQL语句的复杂度,可以将分页操作的种类分为只包含排序操作的分页包含过滤操作排序操作的单表查询分页包含过滤操作排序操作的单分区表查询分页包含过滤操作排序操作的表关联查询分页等几种类型。

1、只包含排序操作的分页

一般地,分页操作的SQL语句带有排序操作,即:order by。例如:在客户访问记录表中查询最新访问的30个客户,这就需要按照客户的访问时间进行降序排序。

对于这类分页操作的调优,需要利用索引是有序的特性,为order by中的排序列设置索引。

如果是对多个列进行排序,需要为所有的排序列创建一个复合索引,创建时需要注意复合索引中的各列的顺序需要与order by中指定的各排序列的顺序一致,且还需注意索引是升序还是降序,以下示例1展示了该类SQL语句的调优。

【示例1】

对名为user的用户信息表执行分页查询,查询最近访问但积分最低的前10位用户,分页语句如下所示。

user表中的记录数为300万左右。

为排序列创建一个复合索引,usercore列在前,lasttime列在后,且将lasttime列的索引设置为降序,即:

创建索引后,该语句的真实执行计划中的核心内容如下图所示。

通过以上的执行计划可以知:

  • (1)该SQL语句执行时访问User表时采用了INDEX FULL SCAN(索引快速全扫)的访问方式(因为未指定过滤条件,所以只能采用INDEX FULL SCAN的访问方式);

  • (2)执行INDEX FULL SCAN时访问10条记录后,已经满足分页要求,扫描终止,该SQL语句执行完毕。即上图执行计划中的COUNT STOPKEY(COUNT STOPKEY一旦获取到满足分页条件所需的记录后即停止SQL语句的执行)操作;

  • (3)执行计划中没有诸如SORT ORDER BY、SORT ORDER BY ROWNUM之类的排序操作,说明以上SQL语句执行时利用了索引消除了排序操作。

综上所述可知,该SQL的执行计划是正确的,高效的。

此外,对于只有1个列的降序排序操作,也可以不将该列的索引设置为降序索引,而是创建一般的升序索引,在查询执行时使用index_desc提示器,使得执行对该索引的扫描时采用降序扫描的方式。

如果创建符合索引时,排序列的顺序与order by中的排序列顺序不一致,在查询执行时,排序列的索引将仅用于通过索引访问记录,之后对获取的结果集再执行一次额外的排序操作,执行计划中将出现SORT ORDER BY或SORT ORDER BY ROWNUM之类的排序操作提示,说明并未利用索引消除排序操作。

如果创建的索引的顺序与实际排序的顺序不一致,例如:降序排序,升序索引,执行时也未使用index_desc提示器,则在查询执行时,排序列的索引也将仅用于通过索引访问记录,之后也要对获取的结果集再执行一次额外的排序操作。

2. 包含过滤条件和排序操作的分页

对于包含过滤条件和排序的分页,除了为排序列创建索引外,还需要为过滤条件创建索引。根据过滤条件的不同,又分为等值过滤和非等值过滤。

Ⅰ.等值过滤

如果分页语句中包含等值过滤和排序,此时需要为等值过滤列和排序列创建复合索引,该复合索引的顺序为等值过滤列在前,排序列在后,即:

(等值过滤列1,等值过滤列2,...,排序列1,排序列2,...)

以下示例2展示了该类SQL语句的调优。

【示例2】

对名为user的用户信息表执行分页查询,查询最近访问但积分最低的前10位类别为C类用户,分页语句如下所示。

为等值过滤列,排序列创建一个复合索引,按userclass,userscore,lasttime的顺序创建,即:

创建索引后,该语句的真实执行计划中的核心内容如下图所示。

通过以上的执行计划可以知:

  • (1)该SQL语句执行时访问User表时采用了INDEX RANGE SCAN(索引范围扫描)的访问方式,因为已经指定了过滤条件,且为过滤条件列设置了索引。

  • (2)执行INDEX RANGE SCAN时访问10条记录后,已经满足分页要求,扫描终止,该SQL语句执行完毕。即上图执行计划中的COUNT STOPKEY操作;

  • (3)执行计划中没有诸如SORT ORDER BY、SORT ORDER BY ROWNUM之类的排序操作,说明以上SQL语句执行时利用了索引消除了排序操作。

综上所述可知,该SQL的执行计划是正确的,高效的。

需要注意的是,创建复合索引时等值过滤条件列要放在排序列之前,如果将其放在排序列之后,即:按userscore,lasttime,userclass,的顺序创建上述分页语句的真实执行计划将变为如下图所示的。

通过以上的执行计划可以发现,对user表的访问方式由INDEX RANGE SCAN变为INDEX FULL SCAN方式。

过滤执行时为执行计划中id为7中对应的access和filter两种方式的结合,该方式说明在使用userclass列上索引访问user表时在执行索引扫描的同时又执行了对记录的过滤操作。

具体操作为:扫描索引时,同时对每条索引按照过滤条件,如果符合过滤条件的记录达到分页操作指定的10条后,扫描停止。

这种边扫描边过滤的访问方式的执行效率较直接执行INDEX RANGE SCAN的访问方式稍低,因为这种方式的逻辑读多于INDEX RANGE SCAN方式。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述
在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐