【发布时间】:2020-06-12 19:07:11
【问题描述】:
Laravel Eloquent softdeleteable(有时称为 softdeletable)表如下所示:
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(根据 EXPLAIN PARTITIONS 将修剪分区,而 IS NULL 不会)将始终出现在查询中。
我认为分区总是会减少要检查的行数,有时查询会受益于使用剩余的索引之一。我不确定我是否正确。
【问题讨论】:
标签: mysql mariadb partitioning