【发布时间】:2010-09-14 00:38:26
【问题描述】:
假设我有一个包含两个字段“foo”和“bar”的数据库表。它们都不是唯一的,但它们中的每一个都被索引。但是,它们不是一起索引,而是各自有一个单独的索引。
现在假设我执行诸如SELECT * FROM sometable WHERE foo='hello' AND bar='world'; 之类的查询,我的表中有大量的行,其中 foo 是“hello”,而少数行是“世界”。
因此,数据库服务器在底层做的最有效的事情是使用 bar 索引来查找 bar 为 'world' 的所有字段,然后仅返回 foo 为 'hello' 的那些行。这是O(n),其中 n 是 bar 为“世界”的行数。
但是,我想这个过程可能会反过来发生,即使用 fo 索引并搜索结果。这将是 O(m) 其中 m 是 foo 是“hello”的行数。
那么,Oracle 是否足够聪明,可以在这里高效搜索?其他数据库呢?或者有什么方法可以在我的查询中告诉它以正确的顺序搜索?或许通过将bar='world' 放在WHERE 子句的首位?
【问题讨论】:
标签: database oracle optimization indexing