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

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.2k
2 个回答

破案了

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 的分区表有许多优点,但也存在以下缺点:

  • 数据库的复杂性增加:分区表需要更多的工作来维护和管理。这会增加数据库的复杂性。
  • 不容易扩展:在一个分区表上添加更多的分区是一项困难和耗时的工作,这可能需要更多的时间和资源。
  • 空间利用率低:如果每个分区中的数据量不均匀,那么分区表可能会浪费大量的磁盘空间。
  • 可能会影响性能:对于一些查询,使用分区表可能会影响查询性能,因为分区表需要额外的处理来获取所需的数据。
  • 不支持外键约束:在分区表中,外键约束不能跨分区表执行。这意味着,如果需要在两个分区表之间定义外键关系,就必须手动实现该关系,这可能会导致额外的工作和错误的可能性增加。

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题