通过 IS NOT NULL sqlite 索引数据库

问题描述 投票:0回答:2

我在 Sqlite 中有以下类型的数据集:

person_id 税号
1 123 2000
2
3 321 3000
4

因此,对于许多观察结果来说,

tax_id
就是
NULL
。我会经常按那些
tax_id is not NULL
进行过滤,并且我想基于此创建一个索引。是否可以?我不关心
tax_id
数字本身,我只关心这个人有一个
tax_id

简单的答案是创建一个新列,如果

1
则使用
tax id is not Null
,否则使用
0
,然后基于这个新列建立索引。但看起来不太优雅。

sqlite indexing null
2个回答
2
投票

这称为“部分索引”。您在末尾添加 WHERE 子句。

CREATE INDEX idx_taxes ON taxes(tax_id) WHERE tax_id IS NOT NULL;

参见 https://www.sqlite.org/partialindex.html


0
投票

您可以在表达式上创建索引!

CREATE INDEX "taxes(tax_id IS NOT NULL)"
ON taxes(tax_id IS NOT NULL)

唯一需要注意的是,要让 sqlite 使用此查询,您必须使用一个看起来相当奇怪的条件:

SELECT * FROM taxes
WHERE (tax_id IS NOT NULL) == TRUE

虽然我认为这对于存储或计算来说并不是“更有效”(正如@PChemChuy的答案的评论中指出的那样),但我仍然认为它很酷🤷u200d♀️

© www.soinside.com 2019 - 2024. All rights reserved.