对于 SQL 查询性能,处理空列的最佳方法是什么?
假设我有一些数据对象 Person 和 Employer。一个人可以有一个雇主的引用,但他们也可以是失业的,这通过有一个空引用来表示。
对可以为空的 EmployerId 字段进行左外连接,还是对“空”雇主进行内连接,然后在数据检索代码中将该“空”雇主变为实际空值,对数据库性能是否更好?
(我知道这是一个微不足道的例子,但假设我有数万行外部连接开始显着影响性能)
可空列的外部联接
表人员(PersonId、Name、EmployerId)(EmployerId 可以为空)
(1, 'John Doe', 1)
(2, 'Joe Smith', NULL)
(3, 'Jane Doe', 2)
表雇主(EmployerId,姓名)
(1, 'Microsoft')
(2, 'google')
询问
SELECT * FROM Person LEFT OUTER JOIN Employers ON Person.EmployerId = Employers.EmployerId
(1, 'John Doe', 1, 'Microsoft')
(2, 'Joe Smith', NULL, NULL)
(3, 'Jane Doe', 2, 'google')
除了读取数据库之外,代码不需要做任何事情。
“空”行的内连接
表人员(PersonId、Name、EmployerId)(EmployerId 不可为空)
(1, 'John Doe', 1)
(2, 'Joe Smith', 0)
(3, 'Jane Doe', 2)
表雇主(EmployerId,姓名)
(0, '{NULL}')
(1, 'Microsoft')
(2, 'google')
询问
SELECT * FROM Person INNER JOIN Employers ON Person.EmployerId = Employers.EmployerId
(1, 'John Doe', 1, 'Microsoft')
(2, 'Joe Smith', 0, '{NULL}')
(3, 'Jane Doe', 2, 'google')
代码必须进行数据库读取,然后检测“{NULL}”并转换为空引用。