首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:分区是处理删除的好方法吗?

MySQL:分区是处理删除的好方法吗?
EN

Stack Overflow用户
提问于 2010-11-07 07:32:13
回答 2查看 1.5K关注 0票数 4

我有一个MySQL表:

代码语言:javascript
复制
CREATE TABLE responses (
    id INT NOT NULL AUTO_INCREMENT,
    other_id INT NOT NULL,
    details TEXT,
    deleted BOOLEAN,
    PRIMARY KEY (id)
);

用户可以删除responses中的记录。

我的计划是使用字段deleted来实现删除。每当用户删除记录时,我都会将deleted设置为1

有时,我可能想要删除所有已删除的记录,或者将它们存档。我正在考虑使用分区来使其更快:

代码语言:javascript
复制
PARTITION BY LIST(deleted) (
    PARTITION pActive VALUES IN (0),
    PARTITION pDeleted VALUES IN (1)
);

我的问题是,这会不会让删除的过程变得更慢?现在,当我更改记录的"deleted“字段时,MySQL需要将记录移动到一个完全不同的分区。这看起来可能会很慢。

任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-07 07:40:49

是的,为了在分区之间传递,我预计两个状态之间的转换会更慢。但对现有值的已删除/未删除查询会更快,尽管不涉及删除状态的查询不会得到改善。

这一切都是关于表中最常见的操作,并接受可以妥协的事实。

票数 3
EN

Stack Overflow用户

发布于 2010-11-07 07:41:30

我在过去的一个项目中使用了这种方法,我个人的感觉是这不是最好的方法。我觉得还是直接删除记录比较好。当您有一个这样的标志时,使用您的数据库的每个人都必须明白,表中存在的记录可能不是“真实”记录,这取决于是否设置了deleted标志。这只会让数据库变得不那么直观,在我看来也更难使用。

如果您关心性能,我会考虑如何正确地分配您的表空间,您仍然可以使用分区方案。您可以按年和月对数据进行分区(如果您需要该级别的粒度),以帮助提高性能。

但我会避开deleted标志。在我参与的项目中,这真的让人头疼。例如,如果有人试图插入与被“删除”的记录完全相同的另一条记录(此处deleted表示删除标志为真),该怎么办?您是将现有记录上的deleted设置为false,还是插入另一个全新的记录?如果您插入了一个全新的记录,那么您如何在表中定义您的主键,因为现在您有2条记录具有相同的键?你让deleted成为密钥的一部分吗?重点是,你必须处理所有这些类型的非琐碎问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4115732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档