由于条件有所改变,我正在修改原始问题 - 我在Oracle11g&显示结果需要27秒。任何人都可以建议解决方案,以改善查询的响应时间?我在下面提供相关细节 -
select Column1 , round(count(Column2)/10)
from SE_CA
where Column3 <= 4855
and Column4 > 4490
group by Column1;
SE_CA table has total 123914265 records.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3324421310
-------------------------------------------------
| Id | Operation | Name | Cost (%CPU)|
-------------------------------------------------
| 0 | SELECT STATEMENT | | 211K (3)|
| 1 | HASH GROUP BY | | 211K (3)|
|* 2 | TABLE ACCESS FULL| SE_CA | 208K (1)|
-------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------
2 - filter("Column3"<=4855 AND "Column4">4490)
SQL> desc SE_CA;
Name Null? Type
Column1 VARCHAR2(3)
Column2 NUMBER
Column3 NUMBER
Column4 NUMBER
Column5 NUMBER
Column6 NUMBER
Column7 NUMBER
Column8 NUMBER
Column9 VARCHAR2(5)
Column10 VARCHAR2(12)
Index Definition -
CREATE INDEX IDX1_SE_CA ON SE_CA(Column3);
CREATE INDEX IDX2_SE_CA ON SE_CA(Column4);
CREATE INDEX IDX4_SE_CA ON SE_CA(Column1);
您能告诉我创建的索引是否正确或我是否需要不同的索引?
答案 0 :(得分:0)
了解是否可以提高此查询的性能的关键是了解有关数据的几个基本统计信息。
如果谓词Column3&lt; = 4855将包含表的30%的行,那么全表扫描或快速全索引扫描将是优化器的最佳选择,如果是只有表格上的谓词。
现在,可能是谓词Column4&gt; 4490将包括表的90%的行 - 基于此,优化者可能得出结论,当两个谓词都存在时,那么要检索的行的比例是0.3 * 0.9 = 27%。这仍然表明完全扫描是合适的。
然而,这两个值之间可能存在相关性,因此column1的低值很少具有column2的高值,并且只有3%的行满足该条件。在这种情况下,可能值得尝试使用基于索引的访问方法。
这是优化器动态采样可以通过包含优化器提示来检测的情况:
select /*+ dynamic_sampling(SE_CA 4) */ Column1 , ...
所以得到关于值分布的问题的答案,并尝试动态采样 - 这个查询看起来像是一个很好的候选者,因为我认为“EXPOSED_TIME”和“INFECTIOUS_TIME”之间存在相关性。 )
由于您希望从表中检索大约10%的行,因此基于索引的访问表的方法不太可能有所帮助。甚至索引范围扫描也可能不如优化器选择的索引快速全扫描有效。这取决于I / O子系统的效率以及单块和多块i / o的相对速度。 (你能确保段空间是自动分配的,还是以至少1MB的单位统一分配?)
但是,如果您具有可用的分区选项,则可以在EXPOSED_TIME上对此表进行范围分区,以便允许更有效的分区修剪扫描以选择表行的子集。尽管如此,这是一个很大的改变,并且必须考虑到对其他操作的副作用。
您可能还会考虑使用低度的查询并行性,尽管这也会产生副作用(段级检查点,这可能会对表中发生很多更改的表产生负面影响)时间)。