通过使用oracle使应用程序运行非常缓慢来订购

通过使用oracle使应用程序运行非常缓慢来订购,oracle,sql-order-by,Oracle,Sql Order By,在我的应用程序中,我需要生成由所有客户端完成的事务历史报告。我的应用程序使用了Oracle 12c。我有30万客户。此表是相关的客户端详细信息和事务历史记录表。我已经编写了查询,以生成每月显示交易历史的查询。它返回了近2000万条记录 SELECT C.CLIENT_ID, CD.CLIENT_NAME, ...... FROM CLIENT C, CLIENT_DETAILS CD, TRANSACTION_HISTORY TH --Condition part ORDER BY C.CLI

在我的应用程序中,我需要生成由所有客户端完成的事务历史报告。我的应用程序使用了Oracle 12c。我有30万客户。此表是相关的客户端详细信息和事务历史记录表。我已经编写了查询,以生成每月显示交易历史的查询。它返回了近2000万条记录

SELECT C.CLIENT_ID, CD.CLIENT_NAME, ...... FROM CLIENT C, CLIENT_DETAILS CD, 
TRANSACTION_HISTORY TH
--Condition part
ORDER BY C.CLIENT_ID
这3个表有正确的索引,运行良好。但是,当使用order by获取数据以按顺序显示客户时,此查询需要8小时来执行批处理过程


我已经分析了查询的成本。费用是80085英镑。但是当我从查询中删除orderby时,成本变成了200。所以我现在已经取消了订单。但我需要按订单给顾客看。我不能使用这个限制。有什么方法可以克服这个问题吗?

您可以尝试在表中为客户机id编制索引,这将加快表的性能,以便按某种顺序获取数据

您可以使用该链接作为参考:


希望这能帮助您

事务历史记录表中有多少行?我怀疑有很多(数十亿,也许?)表没有分区,如果查询使用ORDERBY运行超过8小时。这是可能的(取决于您的“条件部分”您可能会从分区中获得一些好处。请编辑您的问题,将查询的执行计划包括在有和没有order by子句的情况下-这可能会对问题有所帮助。每3个月有一个分区。现在事务历史记录有近4亿条记录。抱歉,Boneist。不幸的是,我无法提供execu更新计划。我是从手机上问这个问题的。我的办公室有一些限制——crore是一千万。@Varman成本栏对SQL优化没有价值,因为“最佳”执行计划可能不是成本最低的计划。你可以看看@Varman。如果你将表/视图/索引/等名称修改为通用名称,你完全可以给出执行计划,尽管你的办公室有限制。但是,从移动设备开始有点难!*{:-)遗憾的是,您的问题中没有足够的信息能够帮助您。我们可以推测,但它不太可能对您有用。请在您可以的时候更新您的问题,以便在查询中包括执行计划和条件-您不必使用与实际表等相同的名称,但它们应该与我所说的名称相匹配n执行计划。