Oracle数据库SQL执行计划怎么查看?如何分析?CharyGao

数据库SQL执行的效率会直接影响整体应用的性能,在大数据量和复杂SQL语句的情况下,一定要查看数据库SQL的执行计划,并分析哪些语句耗费较多,值得优化!就Oracle数据库而言,下面潘老师来谈谈我们该如何去查询和分析执行计划?

执行计划(explainplan)是指:一条查询语句在数据库中的执行过程或访问路径的描述。

2、执行顺序在plsql中我们可以使用图中的箭头直接来调试执行顺序,非常方便,像Navicat没有就可以根据据Operation缩进来判断,缩进最多的最先执行(当缩进相同时,最上面的最先执行),同一级如果某个动作没有子ID就最先执行,同一级的动作执行时遵循最上最右先执行的原则。

3、一些动作的解释如plsql那张图中类似INDEXRANGESCAN、TABLEACCESSFULL等等,即描述的是该动作执行时表访问(或者说Oracle访问数据)的方式;

TABLEACCESSFULL:全表扫描TABLEACCESSBYROWID:通过ROWID的表存取TABLEACCESSBYINDEXSCAN:索引扫描

1)全表扫描:Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的Where限制条件;全表扫描时可以使用多块读(即一次I/O读取多块数据块)操作,提升吞吐量;使用建议:数据量太大的表不建议使用全表扫描,除非本身需要取出的数据较多,占到表数据总量的5%~10%或以上。

2)通过ROWID的表存取ROWID是由Oracle自动加在表中每行最后的一列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值,你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作,一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯一的,即使发生行迁移,该行的ROWID值也不变。

让我们再回到TABLEACCESSBYROWID来:行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID可以快速定位到目标数据上,这也是Oracle中存取单行数据最快的方法;

3)索引扫描在索引块中,既存储每个索引的键值,也存储具有该键值的行的ROWID。扫描其实分为两步:Ⅰ:扫描索引得到对应的ROWIDⅡ:通过ROWID定位到具体的行读取数据

INDEXUNIQUESCAN:索引唯一扫描INDEXRANGESCAN:索引范围扫描INDEXFULLSCAN:索引全扫描INDEXFASTFULLSCAN:索引快速扫描INDEXSKIPSCAN:索引跳跃扫描

a)INDEXUNIQUESCAN(索引唯一扫描):

针对唯一性索引(UNIQUEINDEX)的扫描,每次至多只返回一条记录;表中某字段存在UNIQUE、PRIMARYKEY约束时,Oracle常实现唯一性扫描;

b)INDEXRANGESCAN(索引范围扫描):

使用一个索引存取多行数据;发生索引范围扫描的三种情况:

在唯一索引列上使用了范围操作符(如:><<>>=<=between)在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描)对非唯一索引列上进行的任何查询[/list]c)INDEXFULLSCAN(索引全扫描):进行全索引扫描时,查询出的数据都必须从索引中可以直接得到(注意全索引扫描只有在CBO模式下才有效)d)INDEXFASTFULLSCAN(索引快速扫描):扫描索引中的所有的数据块,与INDEXFULLSCAN类似,但是一个显著的区别是它不对查询出的数据进行排序(即数据不是以排序顺序被返回)e)INDEXSKIPSCAN(索引跳跃扫描):Oracle9i后提供,有时候复合索引的前导列(索引包含的第一列)没有在查询语句中出现,oralce也会使用该复合索引,这时候就使用的INDEXSKIPSCAN;

当然还有一些表连接方式的动态在此就不再展开了,我们在优化SQL时重要的一步就是尽量避免了全表扫描,查看SQL是否命中索引,优化COST较大的执行步骤!

THE END
1.中国首款纯太阳能汽车来了!造价1000万以上,神舟12同源技术造价1000万以上,神舟12同源技术 贾浩楠 发自 副驾寺智能车参考 | 公众号 AI4Auto 中国自主首款「千万豪车」诞生,还是太阳能驱动: “天津号”,由天津市立项招标,并由天津本地数十家企业一同打造。 跟我们之前介绍过的光年太阳能汽车不同,“天津号”是不靠插电,不用增程的纯太阳能汽车。https://www.dongchedi.com/article/7118986338837545510
2.BAT大厂面试的100道考题算法源码架构中间件设计模式网络10:关于 ArrayList 和 LinkedList 插入1000万个元素性能对比 选项: A.头插时,ArrayList 性能高于 LinkedList B.头插时,LinkedList 性能高于 ArrayList C.中间插,ArrayList 性能高于 LinkedList D.中间插,LinkedList 性能高于 ArrayList E.尾插时,ArrayList 性能高于 LinkedList https://blog.csdn.net/generalfu/article/details/126926328
3.人的一生要花多少钱?笨方法轻松挣足一千万从留财方面来看,如自己比太太和子女离开的早,要让太太与子女得到一笔可维持现有生活品质不变的现金。目前留给子女的钱既能照顾到子女的一生又能在自己的掌控中。 产品配置: 保障类:200万的终身人寿保险保额,与家庭准备金的数额相同,其中包括大病保险60万,意外保险100万,意外医疗5万,住院津贴300元/日,同时兼备一定https://insurance.eastmoney.com/a2/20110817156549618.html
4.海量数据处理方法有哪些?(如何处理海量数据?)上千万或上亿个数据在现在的机器的内存中应该能存下,所以考虑采用hash_map、搜索二叉树、红黑树等来进行次数统计,然后取出前n个出现次数最多的数据,这一步可以用堆完成。 1000万个字符串的去重 有1000万个字符串,其中有些字符串是重复的,请把重复的字符串全部去掉,保留没有重复的字符串。 https://www.niaogebiji.com/article-115037-1.html
5.日本买房钱怎样转过去啊(1000万日元在日本能买房吗)根据当前日元对人民币的汇率,1000万日元约合600万元人民币。在日本的一线城市如东京、大阪等,购买房产的价格普遍较高,但在一些二线或者三线城市,1000万日元也能买到不错的房子。 例如,位于日本冈山市的一栋带露台的主卧,总价格仅为994万日元,约合人民币60万。而在日本福冈市,1000万日元也能买到至少两居室的公寓。https://m.hinabian.com/house/news/art-626.html
6.个人所得税专项附加扣除政策解读综合办公室答:具体扣除方法由父母双方协商决定,一个孩子扣除总额不能超过1000元/月,扣除人不能超过2个。 13.我不是孩子亲生父母,但是承担了他的抚养和教育义务,这种情况下我可以享受子女教育扣除吗? 答:一般情况下,父母负有抚养和教育未成年子女的义务,可依法享受子女教育扣除;对情况特殊、未由父母抚养和教育的未成年子女,https://www.qvc.edu.cn/cjc/col/1600421691329/2023/06/16/1686897794978.html
7.1000万!我市购彩者喜中大乐透头奖1000万!我市购彩者喜中大乐透头奖 近日,冷空气“到访”我市各个区县,虽然带动着温度持续走低,但依旧掩盖不住体彩大奖为这座城市带来的惊喜与温暖:在昨晚的体彩大乐透第23132期开奖中,我市购彩者喜中头奖一注,奖金高达1000万元。 当期体彩大乐透开奖号码为前区“03、04、12、15、23”,后区“02、06”。全国一https://www.cqtcw.net/html/2023-11/19/content_52063812.htm