假设我有一个包含两个字段“foo”和“bar”的数据库表。它们都不是唯一的,但它们中的每一个都被索引。但是,它们不是一起索引,而是每个都有一个单独的索引。
现在假设我执行一个查询,例如SELECT * FROM sometable WHERE foo='hello' AND bar='world';
我的表,其中 foo 为“hello”的大量行和 bar 为“world”的少量行。
所以数据库服务器在底层做的最有效的事情是使用 bar 索引来查找 bar 为 'world' 的所有字段,然后只返回 foo 为 'hello' 的那些行。这是O(n)
其中 n 是 bar 为“world”的行数。
但是,我想这个过程可能会反过来发生,即使用 fo 索引并搜索结果。这将是O(m)
其中 m 是 foo 是“hello”的行数。
那么 Oracle 是否足够聪明,可以在这里高效搜索?其他数据库呢?或者有什么方法可以在我的查询中告诉它以正确的顺序搜索?也许通过将条款bar='world'
放在首位WHERE
?