【发布时间】:2013-12-11 22:29:18
【问题描述】:
我们使用的是 Oracle 11,这是我们用 Java 编写的应用程序。一天一次,通常是下午我们的数据库因为很多大的 sql 查询而冻结。我想以某种方式优化这个查询。此查询由不同表的许多连接组成。我的问题是:使用左连接对性能更好,还是将所有信息放在一个表中并使用一个选择更好?假设我要为这张表建立一个好的索引。
供参考:平均而言,一次查询获取 100 兆字节。这个查询有时也会互相锁定
更新
连接 8 个表的表,它们是具有 3-5 列的普通表,其中一列是一些 ID。 Sql 查询如下:
SELECT t1.c1,t2.c5, t6.c2, ... FROM t1
LEFT JOIN t2 ON t1.c1 = t2.c1
LEFT JOIN t3 ON t3.c1 = t2.c2
LEFT JOIN t4 ON t4.c1 = t2.c1
LEFT JOIN t5 ON t5.c5 = t1.c1
LEFT JOIN t6 ON t6.c1 = t2.c1
LEFT JOIN t7 ON t7.c3 = t3.c1
LEFT JOIN t8 ON t8.c1 = t2.c1
WHERE something
我的问题是,创建一个包含所有连接表的新表是否更好,并使用如下查询:
SELECT c1,c5, c2, ... FROM SOME_NEW_TABLE
更新 2
这里是report,如果有人能概括地解释一下就好了。
【问题讨论】:
-
这个问题太宽泛,无法在这里回答,没有具体细节。进行一些分析、运行 Statspack、查看 SGA、运行解释计划等。我们对您的表及其关系一无所知。
-
感谢有关 Statspack 的建议,我会尝试的。我有使用 utlestat、utlbstat 的 report.txt。但我不理解 90% 的报告信息。如果你能解释一下这份报告的一些内容,我可以在这里粘贴一些部分。
-
如果您发布报告,那么也许可以解释。您必须发布确切的查询及其执行计划,以获得优化它们的建议。
标签: database performance oracle join oracle11g