内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

托福口语体提分语句:的5个句子网站澳门新葡京赌城

网站澳门新葡京赌城硅编译器深入剖析-关于分页语句的性能优化

2018-02-07 16:13 出处:网站澳门新葡京赌城 人气:   评论(0

  分页语句是数据库开发和应用场景比较常见的需求,即按照特定的where条件进行过滤,硅编译器深入剖析-关然后在按照一个或者多个条件进行排序(如果不进行排序无法确执行时候无法返回相同的结果),最后取其中的前十行或者几十行。

  2、是对这个结果集进行排序,如果表过大同时对返回的结果集排序势必导致性能严重下降,针对分页语句性能低下的原因。

  首先我们要确定正确的分页语句框架,如果不按照正确的分页语句框架编写,会严重影响oracle选择正确的执行计划,正确的分页语句框架如下:

  针对这个sql语句,如果T表比较大的话,全表扫描就会非常消耗资源,我们针对object_id列创建索引即可。object_id列选择性非常高,对1000列进行排序性能也很高。创建如下索引:

  采用正确的分页语句框架执行计划走的是T_IDX_ID索引,分页语句显示10行,执行计划中A-ROWS是10行。我们再看看采用其他错误分页语句显示的高级执行计划:

  从错误的执行语句框架中我们可以看到,只要不是正确分页语句框架,oracle都会扫描1000行最后显示10行数据。

  因为索引是排序的,我们可以利用索引的排序功能。在排序的分页语句中如果我们让分页语句直接按照升序或者降序扫描索引,这样的话就避免了全表扫描再排序的这种消耗资源操作。但是我们不确定object_id列是否有非空约束,由于索引是不存空值的,为了能够可能为空的object_id列也存在索引中,我们要在索引中添加一个组合列的常量索引,创建索引语句如下:

  这类分页语句我们要如何创建索引? 因为oracle对这类语句执行过程是先过滤where条件再排序,所以我们创建一个组合索引,给予OWNER,OBJECT_ID列组合(不能)

  第一种where条件过滤后的结果集比较少,我们就采用【分页场景一】进行优化直接创建效率高的索引。

  第二种where条件过滤后结果集比较多,这种我们就要 order by列在前,不等值列在后创建组合索引。

  注:以上两种情况没有明显的分界线,特别是针对反对结果集比较适中的情况,还要综合比较两种创建索引方法谁的执行效率更高而采用哪种方案。

  这类分页语句的优化思想是:既然是多表关联的分页语句,一定是走嵌套循环,不能走hash连接,最后要order by 某个表,一定是 order by的那个表做驱动表,同时驱动表的 order by列必须有索引。

  无法优化的分页场景:但是如果是这种需求select * from a,b where a.id=b.id order by a.xx,硅编译器b. 这种需要对两个表排序情况下就无解了(为什么会搞基于两个表排序的需求,淘宝京东的商品排序大多数是只按照一种属性排序,如按照销量排序,按照价格排序,综合排序),这种情况需要干掉一个 order by 的列。

  如果分页语句中有distinct, group by等需要把表数据全部扫描之后再去排序分页的,这种就无法用专门分页语句进行优化了。

  以上几种分页场景基本包含了目前主要的分页语句的需求和实现,不同的分页语句有一种或者几种优化方案。首先根据【优化场景一】的内容,先选择标准的分页语句框架,然后判断whete条件过滤后的结果集条数是多还是少。如果返回结果集少,则创建效率高的索引;如果返回结果集非常多,于分页语句的性能优化则考虑【分页场景二,三,四】,为分页语句创建一个排序过滤好的索引直接返回结果。对于【无法优化的分页场景】,就要考虑其他手段了,比如说调整分页需求,增加where过滤条件,对大表进行分区和瘦身等其他优化方案。

  相关链接:伟德betvictor 伟德国际2018 伟德betvictor2018 2018betvictor.com betvictor 2018

澳门葡京娱乐作为国际专业的网上博彩游戏运营商,我们承诺,为每一位客户提供最安全、最公平的博彩游戏,以及全方位的服务。
分享给小伙伴们:
本文标签: 硅编译器

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表

    Copyright © 2015-2017 网站澳门新葡京赌城 版权所有 网站地图