gpt4 book ai didi

sql - 为什么使用 IS DISTINCT FROM - Postgres

转载 作者:行者123 更新时间:2023-11-29 12:28:50 24 4
gpt4 key购买 nike

这个函数在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 FROMANSI SQL 的一部分,也是 COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'') 的结果与 CL.tp_pessoa IS DISTINCT FROM P.observacao 不同.

最佳答案

您看到的性能差异很小。专注于正确性。

你举个例子

COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'')

对比

CL.tp_pessoa IS DISTINCT FROM P.observacao

如果CL.tp_pessoaNULL,而P.observacao'',则第一次比较将它们视为相等,而第二个比较将它们视为不相等。

因此,如果要将它们比较为相等,请使用第一个版本;如果要将它们比较为不相等,请使用第二个版本。

关于sql - 为什么使用 IS DISTINCT FROM - Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com