我的表中有一列已删除。在每个 sql 语句中,我检查此 flag 是否为 NULL。是否有人要删除条目,标志设置为当前时间戳。
在恢复条目的情况下,此时间戳用于恢复它们。这是将使用此列的值的唯一用例。
在所有其他情况下,重要的只是知道它是 NULL 还是 IS NOT NULL。
在未来,该表可以并且将会包含数百万行。
在这个列上创建索引有用吗?因为 99% 的语句和用例都不关心值。 MySQL 是否优化了 IS NULL 条件,因此不需要索引?
最佳答案
'deleted' 上的索引也将索引 null 值,从而允许更快地查找非 null/null
我认为这在这种情况下就足够了,不会造成太多开销,因为时间戳是在删除时设置的,因此不会改变太多。 (相反:使用一直更改且仅有时设置为空的编辑时间戳会导致每次更改记录时都调整索引。这可能不是最佳选择。这里不是这种情况。)
(此外,但我不知道索引器是否足够聪明以利用这一点,预期的更改总是转到索引的末尾,无论是在空端还是在“最新”端.)
当然,配置文件(查询执行时间和存储空间,如果重要的话)以找出是否存在由此产生的实际问题。
关于mysql - 仅用于 IS NULL 和 IS NOT NULL 的列上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025814/