小编典典

MySQL:很多表还是很多数据库?

mysql

对于一个项目,我们有一堆始终具有相同结构且未链接在一起的数据。有两种保存数据的方法:

  • 为每个池创建一个新的数据库(约15-25个表)
  • 在一个数据库中创建所有表,并根据表名称更改池。

对于MySQL来说,哪一个更容易和更快地处理?

编辑: 我对数据库设计没有兴趣,只是对两种可能性中的哪一种更快感到兴趣。

编辑2:
我将尝试使其更加清晰。如前所述,我们将获得数据,其中一些日期很少会属于不同的池。将一种类型的所有数据放在一个表中并将其与池ID链接不是一个好主意:

  • 很难备份/删除特定的池(并且我们希望过一会儿(即使使用big int时)用尽主键)

因此,其想法是为每个池创建一个数据库,或在一个数据库中创建许多表。针对数据库的50%查询将很简单inserts。49%selects的主键很简单。

问题是,什么是更快处理的MySQL?许多表或许多数据库?


阅读 456

收藏
2020-05-17

共1个答案

小编典典

单个数据库中的多个表与单独数据库中的多个表之间应该没有明显的性能差异。

在MySQL中,数据库(标准SQL为此使用术语“模式”)主要用作表的命名空间。数据库仅具有一些属性,例如默认字符集和排序规则。的使用GRANT使控制每个数据库的访问权限变得很方便,但这与性能无关。

您可以通过单个连接访问任何数据库中的表(前提是它们由MySQL Server的同一实例管理)。您只需要限定表名:

SELECT * FROM database17.accounts_table;

这纯粹是语法上的差异。它对性能没有影响。

关于存储,您不能像@Chris推测的那样将表组织到每个数据库文件中。使用MyISAM存储引擎,每个表始终有一个文件。使用InnoDB存储引擎,您可以拥有一组合并所有表的存储文件,或者每个表都有一个文件(此文件是为整个MySQL服务器配置的,而不是为每个数据库配置的)。无论哪种情况,在单个数据库与多个数据库中创建表都没有性能优势或劣势。

每个数据库没有多少MySQL配置参数可以使用。影响服务器性能的大多数参数在整个服务器范围内。

关于备份,您可以指定表的子集作为mysqldump命令的参数。备份每个数据库的逻辑表集可能更方便,而不必在命令行上命名所有表。但这对性能没有影响,在您输入backup命令时仅为您带来方便。

2020-05-17