博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle数据库sql调优
阅读量:5124 次
发布时间:2019-06-13

本文共 609 字,大约阅读时间需要 2 分钟。

最近做的一个项目涉及到大数据量的数据表查询。数据表总量在7亿-20亿左右,以主键建立全局唯一索引,分区策略是hash分区+范围分区,很大部分情况下查询条件命中记录数超过万条,单次返回前XX条记录。在调优过程中总结出以下经验:

(1)在业务规则允许的情况下,尽量减少区间限制条件,即便该属性是索引字段。如:DATE>=min AND DATA <= max。如果有区间限制条件,会将所有记录与限制条件逐一比较,如果记录数较大,则会严重影响查询效率。

(2)使用order by排序尽量保证与索引顺序一致,oracle在建立索引的时候会默认以升序排序,order by规则与索引建立顺序一致的话则不会再单独进行排序操作

(3)如果查询条件均在索引范围,可考虑先搜索索引的rowid,通过rowid回表获取数据。该方法的好处是尽量减少回表访问。需要注意的是,该方法适合返回数据量较小的情况,如翻页记录等。

目前还存在多hash分区数据访问排序效率很慢的问题,还在解决中,待续!!!!

(4)在查询总记录条数时,建议sql写法为SELECT COUNT(1) FROM TABLE_NAME WHERE [OPTION CONDITION...]。若查询条件均为索引字段,这样写的好处是不用进行回表操作,直接查找索引获得结果。

转载于:https://www.cnblogs.com/xt2008/p/5735036.html

你可能感兴趣的文章
Unity3D性能优化之Draw Call Batching
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
Linux 普通用户拿到root权限及使用szrz命令上传下载文件
查看>>