我在表的几列上有一个索引。如果我没有提到where
子句中的所有列,那么将使用该索引吗?
答案 0 :(得分:7)
答案是:这取决于。
实际上,这在很大程度上取决于许多统计因素,这些因素通常在创建索引时或通过预定作业时收集。统计数据包括数据的基数(您拥有多少行),其方差,分布,是否有一些值过多,是否有许多不同的值。
通常,当过滤索引顺序中的 first 列时,可以使用索引。但是,当第一列具有足够低的基数时,Oracle优化器可以使用SKIP SCAN
方法迭代第二列的所有值。
我建议您阅读Oracle Concepts指南的section on indexes。 Tom Kyte建议整个指南说当你想知道Oracle RDBMS是什么时,它是最重要的读物。