我的表格中有一列已删除。在每个sql语句中,我检查此标志是否为空。有人想删除条目,标志设置为当前时间戳。
如果要还原条目,此时间戳用于还原它们。这是使用此列的值时的唯一用例。
在所有其他情况下,重要的是要知道它是否为空或是非空。
将来,该表可以并且将包含数百万行。
在此列上创建索引是否有用?因为99%的陈述和用例不关心价值。 MySQL是否优化了IS NULL条件,因此不需要索引?
答案 0 :(得分:2)
'deleted'上的索引也将索引空值,从而允许更快地查找非null / null
我认为这在这种情况下就足够了,并且不会造成太多开销,因为时间戳是在删除时设置的,因此不会发生太大的变化。 (相反:使用一直改变的编辑时间戳,有时只设置为null,每次更改记录时都会调整索引。这可能不是最佳的。这不是这种情况。)< / p>
(另外,但我不知道索引器是否足够智能以利用它,预期的更改总是到达索引的末尾,无论是在null端还是在'最近'端。)
当然,配置文件(查询执行时间和存储空间,如果重要),以确定是否存在由此产生的实际问题。
答案 1 :(得分:1)
无法创建“归档”表并将已删除的行及其时间戳存储起来。 如果用户想要恢复一行,则必须将其从存档转移到主表。
并且您不必在每个查询中检查“flag IS NOT NULL”
答案 2 :(得分:0)