WHERE 子句中的 SQL NVL 替代方案

问题描述 投票:0回答:1

我在工作中确实有一份愚蠢的工作,其中我需要分析和提高一些愚蠢的 20 年前的 SQL 语句的性能。

一个语句在 WHERE 子句中使用了 NVL(难怪它很慢),但我仍然需要提高性能,并且返回时数据确实需要相同。

SELECT *
FROM TOURHead, TOURFIND, SGNRFIND, TNRHead
WHERE TOURHead.cl = '123'
AND TOURHead.cl = TOURFIND.cl
AND TOURHead.TOURNR = TOURFIND.TOURNR
AND TOURFIND.cl =* SGNRFIND.cl
AND TOURFIND.SGNR    =* SGNRFIND.SGNR
AND TOURFIND.cl = TNRHead.cl
AND NVL(TOURFIND.TNR, SGNRFIND.TNR) = TNRHead.TNR;

真的希望有人能帮助我解决这个问题。

我知道 =* 确实不应该使用,并且 JOINS 是正确的方法。不管怎样,我不知道我能做些什么来摆脱 NVL。

sql where-clause nvl intersystems-iris
1个回答
0
投票

您可以使用 isnull 来替代 NVL。

AND ISNULL(TOURFIND.TNR, SGNRFIND.TNR) = TNRHead.TNR;

请检查此列是否有正确的索引。

© www.soinside.com 2019 - 2024. All rights reserved.