标题说明了一切:是否有一种方法可以使快速运行的查询过滤在未编制索引的列上?
例如,我有一个这样的查询:
SELECT *
FROM TEST_TABLE
WHERE INDEXED_DATE_COLUMN BETWEEN TO_DATE( '2019-12-01', 'yyyy-mm-dd' ) AND TO_DATE( '2019-12-02', 'yyyy-mm-dd' );
它运行非常快,因为它在索引列上进行过滤。
第二个查询是这样的:
SELECT *
FROM TEST_TABLE
WHERE NOT_INDEXED_DATE_COLUMN BETWEEN TO_DATE( '2019-12-01', 'yyyy-mm-dd' ) AND TO_DATE( '2019-12-02', 'yyyy-mm-dd' );
第二个查询运行非常慢。我没有在该列上创建索引的权限,并且被要求编写查询,以便以某种方式无需索引即可快速运行查询。我想创建索引并完成它,但是由于在特定情况下我无法控制,因此这不是一个选择。
那么如何将两个查询修改为与第一个查询一样快速运行?
更新:INDEXED_DATE_COLUMN和NOT_INDEXED_DATE_COLUMN在同一表中。仅包括该信息,以帮助解决此问题。
答案 0 :(得分:0)
一种更快运行查询的方法是根据NOT_INDEXED_DATE_COLUMN列对表进行分区。在这种情况下,您可以使用基于范围的分区。