Postgres
中,IS DISTINCT FROM
函数的最佳用途是什么?经过测试发现使用COALESCE
可以在更短的时间内获得相同的结果。
SELECT COUNT(P.id)
FROM produto P
INNER JOIN cliente CL ON P.id_cliente = CL.id_cliente
WHERE
COALESCE(CL.tp_pessoa,'') <> 'JURIDICA' -- test with COALESCE, average 610 ms
(CL.tp_pessoa <> 'JURIDICA' OR CL.tp_pessoa IS NULL) -- test with OR, average 668 ms
CL.tp_pessoa IS DISTINCT FROM 'JURIDICA' -- test with IS DISTINCT FROM, average 667 ms
OUTRO TESTE:
COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'') -- test with IS DISTINCT FROM, average 940 ms
CL.tp_pessoa IS DISTINCT FROM P.observacao -- test with ```IS DISTINCT FROM```, average 930 ms, a little beter here
它具有较低的性能,而且是其他数据库(如SQL Server
)中没有的功能,这是不使用它的另一个原因。
进行另一个测试,在该测试中两个条件都可以是NULL
时,IS DISTINCT FROM
略有优势,这将是其使用的情况,更适用于哪里?
编辑:
像@hvd所说的,IS DISTINCT FROM
是ANSI SQL
的一部分,此外,COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'')
的结果与CL.tp_pessoa IS DISTINCT FROM P.observacao
不同。
tp_pessoa
不应该是什么,在这种情况下是否可以使用index
来协助? - Tiago Oliveira de Freitas