使用NULL查询性能

Sur*_*ish 3 sql database sql-server performance

我想知道NULL值如何影响SQL Server 2005中的查询性能.

我有一个类似于这个(简化)的表:

ID | ImportantData | QuickPickOrder
--------------------------
1  | 'Some Text'   | NULL
2  | 'Other Text'  | 3
3  | 'abcdefg'     | NULL
4  | 'whatever'    | 4
5  | 'it is'       | 2
6  | 'technically' | NULL
7  | 'a varchar'   | NULL
8  | 'of course'   | 1
9  | 'but that'    | NULL
10 | 'is not'      | NULL
11 | 'important'   | 5
Run Code Online (Sandbox Code Playgroud)

而我正在对它进行查询,如下所示:

SELECT   *
FROM     MyTable
WHERE    QuickPickOrder IS NOT NULL
ORDER BY QuickPickOrder
Run Code Online (Sandbox Code Playgroud)

因此,QuickPickOrder基本上是一个用于从较大列表中挑选出一些常用项目的列.它还提供了它们对用户显示的顺序.NULL值表示它不会显示在快速选择列表中.

我总是被告知数据库中的NULL值在某种程度上是邪恶的,至少从标准化的角度来看,但是它是否可以在WHERE约束中过滤掉不需要的行?

使用特定的数字值(如-1或0)来表示不需要的项目会更好吗?还有其他选择吗?

编辑: 该示例不准确地表示实际值与NULL的比率.更好的示例可能会为每个非NULL显示至少10个NULL.表大小可能是100到200行.它是一个参考表,所以更新很少见.

Qua*_*noi 5

SQL Server索引NULL值,所以这很可能只是使用Index Seek索引QuickPickOrder,用于过滤和排序.