我很困惑,因为我不了解 Oracle 计划执行我的查询。这是原始查询:
SELECT *
FROM T1 INNER JOIN T2
ON TI.INDEX1 = T2.INDEX1
WHERE
T1.C1 LIKE CONCAT('%', CONCAT(:param1, '%'))
AND T2.C2 LIKE CONCAT('%', CONCAT(:param2, '%'))
此查询需要 60 秒的结果(我对两个参数都使用空值)。
我绑起来找出问题,我发现 T2.C2 是问题所在。没有秒的相同查询条件需要 15 秒,所以,我已经像这样进行了转换:
SELECT *
FROM T1 INNER JOIN T2
ON TI.INDEX1 = T2.INDEX1
WHERE
(:param1 IS NULL OR T1.C1 LIKE CONCAT('%', CONCAT(:param1, '%')))
AND (:param2 IS NULL OR T2.C2 LIKE CONCAT('%', CONCAT(:param2, '%')))
什么也没有变!!!!使用两个 where 子句查询需要 60 秒!!!
我绑了这个:
SELECT *
FROM T1 INNER JOIN T2
ON TI.INDEX1 = T2.INDEX1
WHERE
(:param1 IS NULL OR T1.C1 LIKE CONCAT('%', CONCAT(:param1, '%')))
AND (:param2 IS NULL)
谁能解释如何改进这个查询?有人可以帮我理解为什么短路不起作用吗?