进行测试后Postgres IS DISTINCT FROM,试听得到的最佳结果是什么,试听得到了相同的结果,COALESCE但用的时间更少:
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
它具有较低的性能,并且是其他DB中所没有的功能,例如SQL Server,不使用它的另一个原因。
SQL Server
做另一个可以同时满足两个条件的测试,NULL它IS DISTINCT FROM有一点优势,那就是它的使用,更多的应用呢?
NULL
编辑:
就像@hvd所说的那样,它是的一部分,ANSI SQL而的结果COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'')并不相同CL.tp_pessoa IS DISTINCT FROM P.observacao。
ANSI SQL
COALESCE(CL.tp_pessoa,'') <> COALESCE(P.observacao,'')
CL.tp_pessoa IS DISTINCT FROM P.observacao
首先,它很方便。其次,您需要对大量数据进行测试。一秒钟之内,数据库服务器上可能发生很多事情,因此,百分之一秒的微小变化不一定表示整体性能。
从积极的方面来看,我认为Postgres将使用的索引is distinct from。我认为索引不一定会用于所有替代方法。
is distinct from