mysql - MySQL和mariadb数据库的存储和查询效率?

标签 mysql mariadb partitioning data-warehouse

我是在大型数据库中查询的新手。我想知道将一个非常大的数据表分成几个分区是否会提高或降低存储效率和查询速度。例如,如果我有一个非常大的数据表,其中包含一年的信息,有 3 亿行和近 30 列,那么将其分成 12 个月更好还是保持不变?它会提高效率或存储空间,还是没有?

最佳答案

简短回答:不会。磁盘空间会稍微更大;性能不太可能提高。

长答案:

每个分区本质上是一个单独的表;每个表都有一些预先分配的空间。每个分区有 4-7MB 的“可用”空间。

分区本身并不会带来任何性能提升。 (在某些情况下,速度会稍微减慢。)

也就是说,有 4 use cases我知道如果仔细进行分区,可以显着提高速度。你没有说过任何一句话来表明你的情况就是其中之一。最常见的是“时间序列”,其中您需要删除“旧”数据。与DELETE相反,DROP PARTITION的好处几乎是即时的。

请描述您的数据情况 - 数据类型、架构和重要查询。如果是数据仓库应用程序,那么“时间序列”可能有用。更有可能的是Summary tables ;它们通常可以用来大大加快“报告”的速度,而不是冗长的GROUP BY

关于mysql - MySQL和mariadb数据库的存储和查询效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974471/

相关文章:

mysql - 如何在多个表中查询表具有相同列名的记录

php - Doctrine2 和 MySQL 分区

ruby-on-rails - Rails ActiveRecord 和 PostgreSQL 分区

php - Big MySQL 产品历史表分区?

c++ - 最小划分对象 vector (C++)

javascript - 在 React 中刷新页面后持久登录数据

mysql - 是否可以查看数据库索引的底层树?

mysql - 在 Shell 中将 MySQL 查询设置为多个变量

php - MySQL 大请求在 AJAX 中不起作用,需要 LIMIT,而在直接 PHP 中工作

mysql - 如何使用 2 个值在 2 个表之间进行连接?