Mysql索引条件“字段为NULL”

Hug*_*ugo 6 mysql indexing

我有一个带有“deleted_at”字段的表,它是一个日期时间,我希望快速执行此类请求:

SELECT * FROM table WHERE deleted_at IS NULL
Run Code Online (Sandbox Code Playgroud)

是否可以对字段的“空值”建立索引,而不是对字段的每个日期时间值建立索引?

Stu*_*tLC 3

您可以为可为空的列建立索引,但是只有在空值具有良好选择性的情况下才会使用索引,即只有一小部分数据实际上为空。

不幸的是,MySql 不支持 过滤/部分索引,例如SqlServer,它允许您仅对 NULL(或 NOT NULL)行进行索引。

所以TL;DR,如果 NULL 是deleted_at例外,而不是规则,那么创建一个索引,但这也会索引非空日期时间值。