在我的 mysql 数据库中为每个新客户端创建数据透视表是错误的吗?每个表都会有大量数据,如果每个客户都有自己的表,我想我会更有条理,在这种情况下,每个新客户都有 10 个表。但在性能上?那会影响吗?每个人只放一张桌子会不会更有利?请记住,如果它只有一个,那么行数会非常多,例如大约 100 万行。接着?谁能告诉我在这种情况下性能的真正差异?
根据提供商的说法,托管机器具有以下设置:
- 托管您站点的服务器的主板是 SuperMicro。
- 使用 4 个 Intel (R) Xeon (R) CPU E5-2630 处理器
- 并为您的应用程序配备专用的 SSD HDD。
我不同意另一个答案。
数以千计的表导致数以千计的文件,不同用户访问不同文件的开销,用于内部开销的额外磁盘空间等。
PARTITIONs
一个表中的数百个具有相同的问题。在这两种情况下,性能并没有本质上得到改善。选择表(或分区)的成本与任何节省都相当。您的代码需要更复杂才能选择要使用的表;所以你应该考虑让
DATABASE
每个“用户”一个,la WordPress。拥有数百个数据库的问题类似于拥有大量表格的问题。这个网站有很多问题,比如“每个东西只有一张桌子好,还是只有一张桌子好”。答案是一次又一次响亮的一桌。我不会在这里重复这些论点。
如果你说的数据很大,当然每个客户有一个不同的表会让你的查询更快,因为数据和索引都会更小。并且 - 假设您使用
innodb_file_per_table=1
- 您将在操作方面拥有其他优势,例如,如果一个表损坏,InnoDB 将需要修复更少量的数据。另一个解决方案,可能更简洁一些,是使用分区。你可以在物理上将一个表分区成更多的文件,所以效果是一样的:你查询的数据和索引部分会更小。您可以按客户 ID 进行分区。一些优点是:
缺点可能取决于您的具体用例。例如,我不知道您是否出于某种不明确的原因希望能够仅为一组客户添加一列。
我想到的唯一“标准”缺点是您无法将某些分区存储在不同的媒体上。但是有理由不这样做(例如,备份可管理性)。
此外,MySQL 从不并行查询 - 因此,在这方面,使用分区或使用单独的表之间没有区别。