当前位置:  开发笔记 > 编程语言 > 正文

无需索引即可提高oracle查询性能

如何解决《无需索引即可提高oracle查询性能》经验,为你挑选了3个好方法。

在不创建索引的情况下,我可以做些什么来提高oracle查询的查询性能?

这是我想要更快运行的查询:

SELECT c.ClaimNumber, a.ItemDate, c.DTN, b.FilePath
FROM items a,
itempages b,
keygroupdata c
WHERE a.ItemType IN (112,115,189,241)
AND a.ItemNum = b.ItemNum
AND b.ItemNum = c.ItemNum
ORDER BY a.DateStored DESC

这些列都没有编入索引,每个表都包含数百万条记录.不用说,查询执行需要3分半钟.这是生产环境中的第三方数据库,我不允许创建任何索引,因此必须对查询本身进行任何性能改进.

谢谢!



1> Tony Andrews..:

要求第三方索引其连接列,因为它们应该首先完成!如果没有索引,甲骨文除了蛮力之外别无他法.



2> Rob Booth..:

首先,我将查询重写为ANSI标准:

SELECT c.ClaimNumber, a.ItemDate, c.DTN, b.FilePath
FROM items a
INNER JOIN itempages b ON b.ItemNum = a.ItemNum
INNER JOIN keygroupdata c ON c.ItemNum = b.ItemNum
WHERE a.ItemType IN (112,115,189,241)
ORDER BY a.DateStored DESC

这使得更容易阅读和理解正在发生的事情.它还可以帮助您避免错误(即交叉加入),这可能会导致真正的大问题.然后我会得到解释计划,看看DBMS正在对该查询做些什么.它试图使用一些索引吗?是否正确加入了表格?

然后我会查看我正在使用的表,看看是否有任何已存在的索引,我可以使用它来加快查询速度.最后,正如其他人都建议我删除Order By子句并在代码中执行此操作.



3> BQ...:

您可能想尝试在任何这些表上创建物化视图.然后,您可以在物化视图上创建一个索引,以帮助加快查询速度(然后查询物化视图而不是原始表).

当然,如果更新了基础表,则需要刷新视图和索引.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有