【问题标题】:How can I optimize an SQL query (Using Indexes but not bitmap indexes)?如何优化 SQL 查询(使用索引但不使用位图索引)?
【发布时间】:2018-10-23 23:01:38
【问题描述】:

我有一个 SQL 查询,例如:

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

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

【问题讨论】:

  • 永远不要使用自然连接。它们非常容易出错(向表中添加列会破坏现有查询)。此外,自然连接对我们隐藏了连接标准,这使我们无法提供帮助。到目前为止,您至少应该在 tab1(col1) 上有一个索引,以便为 DBMS 提供一些可以使用的东西。请显示表格连接的列。并且:您真的必须从两个表中选择所有列吗?

标签: sql database oracle optimization query-optimization


【解决方案1】:

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

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

其次,查询在语法上不正确有两个原因。首先,"Red" 是对 的引用,而不是字符串值。该表是否有名为"Red" 的列。第二个原因是你有一个self join,所以ROW1 是模棱两可的。

这引发了更大的问题。您的查询基本上没有任何意义。您正在将表连接到自身,返回重复的列。结果如何?非常不确定:

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

我想不出这个查询有什么用处。我认为没有理由尝试对其进行优化。

如果您想讨论一个真正的问题,我建议您再问一个问题。

【讨论】:

  • @KárolyNeue 。 . .你应该问另一个问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2012-07-03
  • 2012-08-05
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多