是否有必要在对数据库中的可空列进行比较之前进行NULL值检查?

时间:2015-09-04 07:46:42

标签: mysql sql sql-server database

我想知道在数据库中进行比较之前是否有必要或一个好的做法来执行空值检查,特别是在MySQL和MSSQL上,因为我正在研究它们。如果执行空检查会对性能产生影响吗?

简而言之,就产生的结果和性能而言,以下SQL for MySQL中的版本1和版本2有什么区别?

DROP TABLE IF EXISTS t1;

CREATE TABLE t1 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    intval INT NULL DEFAULT NULL,
    strval VARCHAR(32) NULL DEFAULT NULL,
    KEY idx_intval (intval),
    KEY idx_strval (strval)
);

INSERT INTO t1 (intval, strval) VALUES
    (2, 'B'),
    (1, 'A'),
    (NULL, 'C'),
    (4, NULL);

-- Version 1
SELECT * FROM t1 WHERE intval IS NOT NULL AND intval > 1;
SELECT * FROM t1 WHERE strval IS NOT NULL AND strval IN ('A', 'C');

-- Version 2
SELECT * FROM t1 WHERE intval > 1;
SELECT * FROM t1 WHERE strval IN ('A', 'C');

DROP TABLE t1;

2 个答案:

答案 0 :(得分:2)

如果您不使用IS NULL / IS NOT NULL,则每次与NULL的比较都会失败。

所以:

BaseSourceType失败(==>不必指定INTVAL IS NOT NULL)

NULL > 1失败(==>指定STRVAL IS NOT NOT NULL是不必要的)

答案 1 :(得分:0)

我们无法与null进行比较,因为null是一个空字符串。如果您将某些内容与null结果null进行比较。