我正在修改原始问题,因为更改的条件很少 - 我在 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);
- 应用这两个条件后,预期输出约为整个表行(10581643 行)的 10%。
- 单独应用每个条件后,第 3 列的输出为 10581643,第 4 列的输出为 12391426。
- Column3 的最小值和最大值分别为 4623 和 4988。
- 而第 4 列的最小值和最大值分别为 4624 和 4991。
你能告诉我创建的索引是否正确还是我需要不同的索引?