我的桌子上有一栏被删除了。在每个sql语句上,我都检查此标志是否为NULL。是否有人要删除条目,则标志设置为当前时间戳。
如果要还原条目,则使用此时间戳来还原它们。这是使用此列值的唯一用例。
在所有其他情况下,唯一重要的是知道它是空的还是非空的。
将来,该表可以并将包含数百万行。
在该列上创建索引有用吗?因为99%的语句和用例不关心值。MySQL优化是否为空条件,因此不需要索引?
发布于 2011-11-06 11:07:18
对“已删除”的索引也将索引为空值,从而允许更快地查找非空/空值。
在这种情况下,我认为这就足够了,而且不会造成太多的开销,因为时间戳是在删除时设置的,因此不会有太多的更改。(相反:使用一直被更改的编辑时间戳(有时只设置为null )将导致每次更改记录时调整索引。这可能不是最理想的。(这里的情况并非如此。)
(而且,我不知道索引器是否足够聪明,可以利用这一点,预期的变化总是会到达索引的末尾,无论是在空端还是在‘最近’端。)
当然,配置文件(查询执行时间和存储空间都很重要)来确定是否存在实际问题。
发布于 2011-11-06 07:47:22
您不能创建一个“归档”表,并存储已删除的行及其时间戳。如果用户希望还原一行,您只需将其从归档文件传输到主表即可。
而且您不必在每个查询中检查“标志不是空”
发布于 2011-11-06 10:39:27
https://stackoverflow.com/questions/8025814
复制相似问题