【发布时间】:2021-10-26 09:42:59
【问题描述】:
我有一个非常简单的查询,但是当我使用 Max 和 group by 时加载时间太长。你能提出一个替代方案吗?我使用 Oracle 18g 来运行这个查询。 a_num_ver, id, site_id 是主键。
SELECT id
, site_id
, sub_id
, max(a_num_ver) as a_num_ver
, ae_no
, max(aer_ver) AS aer_ver
FROM table_1
GROUP BY id
, site_id
, sub_id
, ae_no
【问题讨论】:
-
在
(id, site_id, sub_id, ae_no)上创建索引。 -
谢谢,这是一个好方法,但我无法创建索引,因为我只是在使用这个表。索引必须设置在我目前不允许的 oracle 表中。请提出另一种方式?。
-
您可能没有太多选择。如果您编辑您的问题以包含存在的索引、查询计划、执行统计信息和有关表的信息(即您是否汇总了 100,000 行?100 万行?10 亿行?),我们可能会提供帮助。但是,如果您没有正确的索引并且无法创建正确的索引,那么您认为“太长”的可能只是 Oracle 需要多长时间才能产生您想要的结果。
-
我会补充: 1. 执行
alter session set statistics_level=all;2. 运行您的查询并获取所有结果; 3. 运行此查询select * from table(dbms_xplan.display_cursor('','','allstats last'));并显示其结果 -
啊!数据库管理员认为有害! @GordonLinoff 说得对:您需要一个索引来支持此查询。如果创建索引不是一个选项,您的替代方法是告诉您的用户这很慢,因为您的 DBA 不合作。在大多数 Oracle 商店中,他们以前都听说过。几次。您也可以尝试在dba.stackexchange.com 上提问。请务必提及您不允许创建索引;也许有人有某种解决方法。
标签: sql oracle query-optimization