当前位置:  开发笔记 > 后端 > 正文

MySQL:许多表或许多数据库?

如何解决《MySQL:许多表或许多数据库?》经验,为你挑选了4个好方法。

对于一个项目,我们有一堆数据总是具有相同的结构并且没有链接在一起.保存数据有两种方法:

为每个池创建一个新数据库(大约15-25个表)

在一个数据库中创建所有表,并按表名来区分池.

哪一个更容易,更快地处理MySQL?

编辑:我对数据库设计问题并不感兴趣,我只是介意两种可能性中的哪一种更快.

编辑2:我会尽力使其更清晰.如上所述,我们将拥有数据,其中一些日期很少在不同的池中共同存在.将一种类型的所有数据放在一个表中并将其与池ID相关联不是一个好主意:

备份/删除特定池很困难(我们希望我们在一段时间后用完主键(即使使用big int))

因此,我们的想法是为每个池创建一个数据库,或者在一个数据库中创建大量表.对数据库的50%查询将很简单inserts.selects主键上有49%是简单的.

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



1> Bill Karwin..:

单个数据库中的多个表与单独数据库中的多个表之间不应存在显着的性能差异.

在MySQL中,数据库(标准SQL为此使用术语"模式")主要用作表的命名空间.数据库只有几个属性,例如默认字符集和排序规则.这种用法GRANT可以方便地控制每个数据库的访问权限,但这与性能无关.

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

SELECT * FROM database17.accounts_table;

这纯粹是一种语法差异.它应该对性能没有影响.

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

每个数据库的MySQL配置参数不多.影响服务器性能的大多数参数都是服务器范围的.

关于备份,您可以将表的子集指定为mysqldump命令的参数.为每个数据库备份逻辑表集可能更方便,而无需在命令行上命名所有表.但是它应该对性能没有影响,只有在您输入备份命令时才能方便.



2> TheTXI..:

为什么不创建一个表来跟踪您的池(使用PoolID和PoolName作为列,以及您想要跟踪的任何其他内容),然后在15-25个表上,您将在所有这些表上添加一列,这将是一个外键返回到您的池表,以便您知道该特定记录属于哪个池.

如果您不想混合这样的数据,我建议制作多个数据库.为相同的功能创建所有多个表使我的蜘蛛感觉刺痛.


@MatthieuF - 我认为他正在谈论"分享"他的数据库.Flickr,YouTube等都这样做.有一个时间,一个完全标准化的数据库根本无法处理它上面的负载.

3> Matthew Farw..:

如果您不希望将一组具有poolID poolname的表作为TheTXI建议使用,请使用单独的数据库而不是多个表来执行相同的操作.

这样,您可以将访问不同池之间的差异限制为初始"使用数据库"语句,您不必每次都重新编码SELECT,或者拥有动态sql.

这种方法的其他优点是:

轻松备份/恢复

轻松启动/停止数据库实例.

缺点是:

管理工作多一点,但不多.

我不知道你的应用程序是什么,但在一个数据库中创建所有表之前,我们真的要仔细考虑.那种疯狂就是谎言.

编辑:如果性能是唯一与您有关的事情,那么您需要对其进行测量.采用一组有代表性的查询并衡量其绩效.

编辑2:许多表/多数据库模型之间的单个查询的性能差异将是可以忽略的.如果你有一个数据库,你可以调整它的地狱.如果你有很多数据库,你可以调整所有数据库的地狱.

我的(我们的 - 不能代表其他人说)重点是,对于调整良好的数据库,三个选项(表中的poolid,多个表,多个数据库)之间的性能几乎没有差异,所以您可以在短期和长期内选择最容易的选项.

对我来说,最好的选择仍然是一个带有poolId的数据库,正如TheTXI建议的那样,然后是多个数据库,这取决于您(主要是管理层)的需求.如果您需要确切知道两个选项之间的性能差异,我们无法给出答案.您需要进行设置并进行测试.

使用多个数据库,可以轻松地将硬件投入其中以提高性能.



4> chaos..:

在您描述的情况下,经验使我相信,当您拥有大量池时,您会发现单独的数据库更快.

但是,这里有一个非常重要的一般原则:不要考虑它的速度,分析它.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有