这个问题可能很奇怪,因为我对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)
但是当我为其他字段创建和索引时,它不会改变一点(即使它们也是日期)。
是否仍然值得将它们纳入我的索引? 如果他们对费用没有任何影响,我是否还应该为其他查询创建索引? 是否使用数据库中的实时统计数据计算成本(基数,......)?
答案 0 :(得分:0)
您可以在查询中提到的所有字段(按此顺序flag, creation_date, end_date, critical_date, id
)创建一个索引,这样您的查询就变成了索引,即RDBMS根本不必读取表,它可以得到从索引中得到的一切。
对于特定查询,Oracle不会在给定表上使用多个索引。只有支持不同的查询才能拥有多个索引。