ORACLE - 如何与COST相关的索引

时间:2017-10-12 08:11:15

标签: sql oracle indexing

这个问题可能很奇怪,因为我对sql的了解有限。

我正在尝试优化包含数百万条记录的数据库,但我似乎并不知道何时有效果。我一直在玩#解释计划'在SQL Developer中,但这些数字对我来说并不是很重要。

例如,我得到了一个包含以下列的表:

ID | Creation_date | End_date | Critical_date | Flag

我在这个表上运行查询,如下所示:

SELECT COUNT(ID) FROM TABLE 
WHERE FLAG = 1
Creation_date < :p_d_one
End_date > : p_d_two
Critical_date < :p_d_three

这给了我64的COST。所以我决定添加索引。

现在我不明白的是,当我为Creation_date创建一个索引时,成本急剧下降 - &gt; (64 - &gt; 9)

CREATE INDEX TABLE_INDEX_CREATION_DATE ON TABLE (Creation_date desc)

但是当我为其他字段创建和索引时,它不会改变一点(即使它们也是日期)。

是否仍然值得将它们纳入我的索引? 如果他们对费用没有任何影响,我是否还应该为其他查询创建索引? 是否使用数据库中的实时统计数据计算成本(基数,......)?

1 个答案:

答案 0 :(得分:0)

您可以在查询中提到的所有字段(按此顺序flag, creation_date, end_date, critical_date, id)创建一个索引,这样您的查询就变成了索引,即RDBMS根本不必读取表,它可以得到从索引中得到的一切。

对于特定查询,Oracle不会在给定表上使用多个索引。只有支持不同的查询才能拥有多个索引。