DB是Oracle 11g,如果这很重要的话。我有一个带有long where子句的查询 - 由三个中等大小的子块组成(显然必须全部评估为true)。但是,对于两个子块,每个语句都只是通过AND连接。因此,对于每个这样的子块,前面的AND,一个左括号和一个右括号是多余的。会删除这些会改善我查询的执行时间吗?
select * from tbl
where 1=1 AND (x OR y OR (w AND z))
AND (a AND b AND c)
AND (d AND e AND f);
与
select * from tbl
where 1=1 AND (x OR y OR (w AND z))
AND a AND b AND c
AND d AND e AND f;
显然这些查询会返回相同的记录,但执行时间有何不同?
答案 0 :(得分:1)
看起来您的代码类似于:
<RequireAll>
Require all granted
Require not ip 1.0.1.0/24
Require not ip 1.0.2.0/23
Require not ip 1.0.8.0/21
Require not ip 1.0.32.0/19
Require not ip 1.1.0.0/24
Require not ip 1.1.2.0/23
Require not ip 1.1.4.0/22
:
在这种情况下,当然有些括号是多余的,即它可以改写为:
where (a = 1 and b = 2 and c = 3)
and (d = 4 and e = 5 and f = 6)
and (g = 7 or h = 8 or i = 9)
然而,两个查询之间的性能没有差异,因为它们在语义上是相同的。