Pin*_*uit 15 mysql database-design best-practices
我已经开始处理一个现有项目,之前的开发人员已将一个表拆分为 10 个单独的表,这些表具有相同的模式但数据不同。
表格如下所示:
[tableName_0]
[tableName_1]
[tableName_2]
[tableName_3]
[tableName_4]
[tableName_5]
[tableName_6]
[tableName_7]
[tableName_8]
[tableName_9]
Run Code Online (Sandbox Code Playgroud)
主键是一个整数id字段。该应用程序使用哈希算法 ( idmod 10) 来了解在进行查找时要访问的表。例如id= 10 将导致[tableName_0].
结合起来,这些表大约有 100,000 行,增长率相对较低。
所以,我的问题是这是否是一个可行的解决方案,或者它是否在任何情况下都是一个很好的做法。我的理论是推动将它们结合起来,因为它会使事情变得更容易UNION,等等。主要的缺点是更改所有应用程序代码以及从长远来看是否值得。
Nic*_*mas 18
我认为每个人都把这个问题复杂化了。这里的关键是:
结合起来,这些表大约有 100,000 行,增长率相对较低。
这对于任何 RDBMS 来说都是小菜一碟。 使用一张表,正确索引它,并将其视为已解决的问题。
您不需要考虑分区,无论是“自制的”还是其他方式,直到您开始处理大量数据——想想数十亿行甚至更多。
您可以使用合并表,但它们在 4.x 版本中已经过时了。鉴于您的应用程序是手动分区的,因为它要么 a) 您运行的是非常旧的版本,要么 b) 原始开发人员不知道表分区。
简而言之,如果您运行的是 5.1+,您可以让 mysql 为您完成此分区。请参阅 http://dev.mysql.com/doc/refman/5.1/en/partitioning.html 如果您使用5.5,您应该检查这些特定文档,因为您会发现一些差异。
分区有很多优点。然而,这实际上取决于手头的数据集、访问模式以及如何对其进行索引。另外,请记住我的以下评论是在 mysql 5+ 分区的上下文中,而不是旧的 mysql 合并表;尽管有时会根据分区来讨论它们。
一些例子:
总而言之,分区表的一般方法可以带来很多好处。然而,在不考虑访问模式和分区方式的情况下盲目应用它并不是灵丹妙药。
我可以想象这样的情况:所需的分区是非常特定于应用程序的,并且更适合将该逻辑放在应用程序层中。然而,考虑到您的直模数 10 描述,这似乎不是这样的情况。
编辑
在写我的描述时,我忘记了你说过你的表有 100K 行。如果没有表的完整模式和平均行长度,很难确定,但总的来说,即使对于适度的硬件来说,这听起来也是中等大小。同时,如果它不会像现在或在可预见的将来那样造成问题,那么就不要花费时间并通过改变它来引入风险。
| 归档时间: |
|
| 查看次数: |
15249 次 |
| 最近记录: |