如何优化SQL查询(使用索引而不是位图索引)?

时间:2018-05-14 10:02:33

标签: sql database oracle optimization query-optimization

我有一个SQL查询,例如:

SELECT * FROM TAB1 NATURAL JOIN TAB2 WHERE TAB1.COL1 = 'RED'

如何优化此查询以在Oracle中使用索引而不使用位图索引?

1 个答案:

答案 0 :(得分:1)

注意:这回答了问题的原始版本。

首先,不要使用NATURAL JOIN。这是一种憎恶,因为它没有使用正确声明的外键关系。它只使用具有相同名称的列,这会产生误导性的结果。

其次,由于两个原因,查询在语法上是不正确的。首先,"Red"是对的引用,而不是字符串值。该表是否具有名为"Red"的列。第二个原因是你有一个自我加入,所以ROW1是不明确的。

这引发了更大的问题。你的查询根本没有任何意义。您正在将表连接到自身,返回重复的列。结果是什么?相当不确定:

  • 如果任何列包含NULL值,则不返回任何行。
  • 如果所有行都是重复的(没有NULL值),那么您将得到一个包含N ^ 2行和重复列的结果集,其中N是表中的行数。< / LI>

我无法想到查询的任何用途。我认为没有理由尝试优化它。

如果您有想要讨论的真实查询,我建议您提出另一个问题。