一个Laravel Eloquent value1 (有时叫 可软化)表是这样的。
id | value1 | value2 | ... | valueN | deleted_at
和 deleted_at
将是 null
激活条目和删除条目的日期时间值。
将InnoDB表划分为活动记录与删除记录是否可以实现?
(意思是对所有的空值进行分区,对任何实际值进行另一个分区)
更新:经过一番研究,这是我得出的分区。
ALTER TABLE `listings`
PARTITION BY RANGE( UNIX_TIMESTAMP(deleted_at) )
SUBPARTITION BY HASH( user_id )
SUBPARTITIONS 40
(
PARTITION active VALUES LESS THAN (0), -- null values (not deleted rows) will go here
PARTITION deleted VALUES LESS THAN MAXVALUE -- non-null values (deleted rows) will go here
);
更新2: 用户永远不会被软删除。 列表将。 他们最终会积累更多的被删除的列表比活跃的列表.用户可以在任何列中定义和组合任何数量的过滤器上(以excel方式)。user_id
和 deleted_at < 0
(它将修剪分区,而 IS NULL
不会,根据 EXPLAIN PARTITIONS
)将始终存在于查询中.我想,分区总是会减少要检查的行数,有时查询会从使用剩余的索引之一中受益。 我不确定我的想法是否正确.