暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL性能优化40条(八)

原创 18626038518 2022-07-26
443

28. 总是使用索引的第一个列
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时, 优化器才会选择使用该索引。

SQL> create index multindex on multiindexusage(inda,indb);
Index created.
SQL> select * from multiindexusage where indb = 1;
Execution Plan---------------------------------------------------------- SELECT STATEMENT Optimizer=CHOOSE0 TABLE ACCESS (FULL) OF 'MULTIINDEXUSAGE‘
很明显, 当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引。
29. 使用UNION ALL替代UNION
当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并,然后在输出最终结果前进行排序。如果用UNION ALL替代UNION,这样排序就不是必要了,效率就会因此得到提高。
由于UNION ALL的结果没有经过排序,而且不过滤重复的记录,因此是否进行替换需要根据业务需求而定。
30. 对UNION的优化
由于UNION会对查询结果进行排序,而且过滤重复记录,因此其执行效率没有UNION ALL高。UNION操作会使用到SORT_AREA_SIZE内存块,因此对这块内存的优化也非常重要。
可以使用下面的SQL来查询排序的消耗量 :

select substr(name,1,25) "Sort Area Name",substr(value,1,15) "Value"from v$sysstatwhere name like 'sort%'

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论