oracle中的每一条sql语句在执行前都需要进行解析,分为软解析和硬解析。oracle中的sql语句有两种,一种是ddl语句(数据定义语言),从不共享,即每次执行都需要硬解析。还有一类是dml语句(数据操作语言),会根据情况选择要么硬解析,要么软解析。要么将sql文本加载到库缓存的堆中。
1.艰难的分析
硬解析通常包括以下过程:
1)检查sql语句的语法,看看是否有语法错误。比如有selectfromwhere之类的拼写错误,如果有语法错误,则推导解析过程;
2)通过数据字典(行缓存)检查sql语句涉及的对象和列是否存在。如果不存在,则推导解析过程。
3)检查sql语句的用户是否对涉及的对象有权限。如果否,则推断解决方案;
4)通过优化器创建最佳执行计划。这个过程会根据数据字典中对象的统计信息来计算多个执行计划的代价,从而得到一个最优的执行计划。这一步涉及大量的数据操作,会消耗大量的cpu资源;(库缓存的主要目的是通过软解析减少这一步);
5)将游标生成的执行计划和sql文本加载到库缓存中的堆中。
2.软解析
所谓软解析是因为在库缓存中存在文本相同的sql语句,所以对这条sql语句的解析可以省去硬解析中的一步多步。从而节省了大量的资源消耗。
3.软分析
所谓软解析,就是不解析。设置session_cached_cursors参数时,当一个会话第三次执行同一个sql语句时,该sql语句的游标信息将被传输到该会话的pga中。这样,s
rank是oracle分析函数之一,主要用法是rank()over(partitionbyxxorderbyzzdesc),一般用于分组排序。与groupbyxxorderbyzz不同,它不影响现有数据。
例如:xxzz1213142226然后选择xx,zz,ra。表中的nk()over(partitionbyxxorderbyzz)aa的结果是xxzzaa12132143221262partitionby,所以你不不用写了,和orderby的排序结果一样,只是会有序号等用途,还有很多分析功能。这个你可以在网上找,里面有很多例子。希望对你有帮助。