当前位置: 首页 > 知识库问答 >
问题:

为什么 mysql5.7 说会移除表分区功能?

宗政元青
2023-04-20

mysql5.7 的文档 中,说未来会移除表分区功能?

图片.png

As of MySQL 5.7.17, the generic partitioning handler in the MySQL server is deprecated, and is removed in MySQL 8.0, when the storage engine used for a given table is expected to provide its own (“native”) partitioning handler. Currently, only the InnoDB and NDB storage engines do this.

但是对于上面这对话,我不是很理解,用翻译软件翻译了一下:

图片.png

图片.png

但是翻译软件翻译出来的,都不通顺,让我不理解这段话到底是什么意思

意思是说,从 mysql5.7.17 开始,不再支持表分区功能?并且要在 mysql8 中移除对表分区的支持?

但是 mysql8 却是支持表分区!

共有2个答案

秦俊发
2023-04-20

你理解错了。不是移除分区表,而是移除通用分区处理器。

5.7.17 之前 MySql 有一个通用的分区处理器(即文中的 Generic Partitioning Handler),除了 除了 Merge、Federated、CSV、Memory 等少数几种存储引擎(也都很小众)外,所有存储引擎都可以基于此实现分区表。

是这个玩意儿被移除了,以后需要用每个存储引擎本身提供的分区处理器(即文中的 Native Partitioning Handler)。具体来说目前只有 InnoDB 和 NDB 两种存储引擎提供了分区处理器。

换而言之,如果之前你还可以在 MyISAM 之类的存储引擎上用分区表,那么之后就不可以了,你得换成 InnoDB。

一直用 InnoDB 的可以直接忽略这项变更。

姜智渊
2023-04-20

破案了

Q:为什么 mysql5.7 说会移除表分区功能?

mysql5.7 的文档 中,说未来会移除表分区功能?

原话如下:

As of MySQL 5.7.17, the generic partitioning handler in the MySQL server is deprecated, and is removed in MySQL 8.0, when the storage engine used for a given table is expected to provide its own (“native”) partitioning handler. Currently, only the InnoDB and NDB storage engines do this.

A:MySQL 5.7 引入了新的分区实现方式,并在文档中强烈建议使用新的实现方式,而不是使用旧的通用分区处理程序。由于新的实现方式更加高效和灵活,因此 MySQL 团队计划在未来将旧的通用分区处理程序移除。在 MySQL 8.0 中,只有使用 InnoDB 和 NDB 存储引擎的表才能提供本地分区处理程序,其他存储引擎将不再支持分区功能。因此,在使用表分区功能时,应该尽可能使用 InnoDB 或 NDB 存储引擎。

图片.png


Q:上面说的“新的分区实现方式”,具体指的是什么?
A:在 MySQL 8.0 中,分区的实现方式发生了变化。具体来说,MySQL 8.0 引入了新的分区引擎,名为“NDB partitioning”,该引擎针对 NDB 存储引擎进行了优化,从而提供了更好的性能和可伸缩性。同时,InnoDB 存储引擎也有了一些改进,例如支持更多种类型的分区表达式等,这也使得 InnoDB 存储引擎更加适合于使用分区功能。因此,MySQL 8.0 中建议使用 InnoDB 或 NDB 存储引擎来实现分区。

图片.png


Q:那“旧的通用分区处理程序”指的是什么?
A:“旧的通用分区处理程序”指的是 MySQL 5.6 及之前版本中用于支持表分区的一种通用实现方式。它是在 MySQL 5.1 中引入的,允许对表按照某个列的范围、哈希值或列表进行分区,但它的实现效率不高,而且在实现上还存在一些问题。因此,在 MySQL 5.7.17 中开始逐步弃用并计划在 MySQL 8.0 中移除。

图片.png


Q:mysql 的 "原生分区的存储引擎" 是什么?
A:"原生分区的存储引擎" 指的是 MySQL 存储引擎本身支持分区功能,而不是通过通用分区处理程序实现的分区。MySQL 的 InnoDB 和 NDB 存储引擎支持原生分区,其他存储引擎如 MyISAM 不支持原生分区。通过使用原生分区,可以更高效地执行查询和维护分区表。


Q:mysql 的分区表有什么缺点?
A:虽然 MySQL 的分区表有许多优点,但也存在以下缺点:

  • 数据库的复杂性增加:分区表需要更多的工作来维护和管理。这会增加数据库的复杂性。
  • 不容易扩展:在一个分区表上添加更多的分区是一项困难和耗时的工作,这可能需要更多的时间和资源。
  • 空间利用率低:如果每个分区中的数据量不均匀,那么分区表可能会浪费大量的磁盘空间。
  • 可能会影响性能:对于一些查询,使用分区表可能会影响查询性能,因为分区表需要额外的处理来获取所需的数据。
  • 不支持外键约束:在分区表中,外键约束不能跨分区表执行。这意味着,如果需要在两个分区表之间定义外键关系,就必须手动实现该关系,这可能会导致额外的工作和错误的可能性增加。
 类似资料:
  • 问题内容: 我有一个配置单元表,该配置表按年,月,日和小时划分。我需要对其执行查询以获取最近7天的数据。这是在。我的查询当前看起来像这样: 这需要很长时间。当我用上面的实际数字代替时,请说: 它会在几分钟内完成。有什么办法可以更改上面的脚本,以便实际上只包含查询中的数字而不是函数? 我尝试使用像: 但这不能解决问题。 问题答案: 解决方案 原始查询出了什么问题? unix_timestamp()

  • 本文向大家介绍请说说什么是分区响应图?相关面试题,主要包含被问及请说说什么是分区响应图?时的应答技巧和注意事项,需要的朋友参考一下 img attribute - can use it, example: - from

  • 问题内容: 使用Django 1.7迁移。 我不小心在数据库中删除了一个表。我假设再次运行迁移将重新创建表,但是没有,Django声明“不应用任何迁移”。 如何让Django重新创建表? 我跑了: 我尝试过更改模型并运行新的迁移,它只是指出“表’x.test_customer’不存在”是正确的,但是我希望它可以重新创建表。 问题答案: 迁移检查模型中的差异,然后将其转换为操作,然后转换为SQL。它

  • 我的公司要求我们对新代码的测试覆盖率达到90%,对于Java代码,我使用gradle jacoco插件,这很好;然而,当分支数量开始呈指数增长时(夸张地说,这可能是几何增长),分支覆盖率很难提高到90%。 这里有一个很做作的例子: 而测试: 以下是报道的内容: 它还说,我错过了4个分支中的1个,或者换句话说,我覆盖了4个分支中的3个(75%的分支覆盖率)。 如果我在这里增加布尔数,分支数似乎是n*

  • 所以问题是在主题中。我认为我没有正确理解重新分区的工作。在我的脑海中,当我说时,我希望所有数据都将在工作人员(假设60个工作人员)之间按相等的大小进行分区。 举个例子。我会在不平衡的文件中加载大量数据,比如400个文件,其中20%的文件大小为2Gb,其他80%的文件大小约为1Mb。我有加载此数据的代码: 然后,我希望将原始数据转换为中间对象,过滤不相关的记录,转换为最终对象(带有附加属性),然后按

  • 本文向大家介绍请说说颜色中#F00的每一位分别表示什么?为什么会有三位和六位的表示呢?相关面试题,主要包含被问及请说说颜色中#F00的每一位分别表示什么?为什么会有三位和六位的表示呢?时的应答技巧和注意事项,需要的朋友参考一下 颜色可以使用红-绿-蓝(red-green-blue (RGB))模式的两种方式被定义: 十六进制符号 #RRGGBB 和 #RGB "#" 后跟6位十六进制字符(0-9,