【发布时间】:2016-06-29 15:17:36
【问题描述】:
我在使用带有聚合函数的 SQL 查询时遇到了一些性能问题,所以我认为了解索引创建的确切工作原理是一个好主意。我遇到了一件我无法理解的事情:这两个创建指令之间有什么区别?:
1.)CREATE INDEX FIELD1_INDEX ON TABLE1 (FIELD1) ONLINE TABLESPACE XXX;
CREATE INDEX timeofrequest_INDEX ON TABLE1 (timeofrequest) ONLINE TABLESPACE XXX;
2.)CREATE INDEX COMBINED_INDEX ON TABLE1 (FIELD1, FIELD2) ONLINE TABLESPACE XXX;
我问的原因是我有这样的查询:
SELECT SUM(field1) FROM table1 WHERE timeofrequest BETWEEN 1 AND 2;
Table1 包含大量数据,因此此查询需要 20 多秒才能准备好。为了避免长时间运行,我尝试使用方法 1,并为每个受影响的字段创建一个索引。确实,还是太慢了。通过分析执行计划,我看到使用了timeofrequest 索引,但没有使用field1 索引。如果我创建一个包含单个语句的组合语句是否会有所帮助?这有什么区别吗?
【问题讨论】:
标签: oracle performance indexing syntax creation