我正在为一些客户创建一个平台。每个客户都需要有联系人,并按组,类别(取决于组)和子类别(取决于类别)进行管理。
数据库将会非常庞大,我担心性能问题。我想优化数据库;现在,我有这些选择:
这是数据性能和管理的最佳选择(CRUD,创建,读取,更新,删除)??
谢谢!
答案 0 :(得分:2)
我认为一个包含多个表的数据库是可行的方法,因为为每个新客户端复制数据库和模式不能很好地扩展。 XML文件听起来很酷但是到目前为止我还没有看到一个像大多数RDBMS一样快的XML读/写引擎,所以就像那个一样。
为了使这项工作(在一个数据库中有许多表),你应该注意索引和优化一个数据库;索引特别有助于您在扩展时保持速度。
答案 1 :(得分:1)
在clienId上使用clustered indexing作为外键可能存在的任何表。此过程将为您提供最佳的以客户为中心的性能,因为您(通常)会在页面提取中提取特定客户端的信息。
对于#2,我建议为您的客户提供优质服务。如果他们想在“他们自己”的单独服务器上“优先托管”,那么他们需要额外付费。这将使维护问题变得有意义。
答案 2 :(得分:0)
3是不可取的。搜索等不是XML文件高效运行的。
2是维护问题。
1应该是可行的。 “非常大”意味着什么?我有一个带有tabe的数据库,目前有15亿条目 - 这是“大”而不是“非常大”。你认为什么很大?
答案 3 :(得分:0)
您是否尝试过实际实现1(这是最简单的)?
EXPLAIN
查看查询的效果如何? 当您遇到瓶颈时(或者当您为性能设置某些基准时)优化,而不是在设计阶段......
更新:您提到“数百万条目”。这对于mysql来说没什么用(假设你在表上使用了正确的索引)。我有一张大约有4千万行的桌子。虽然它没有闪电般的速度,它可以在几秒钟内给出结果。所以你去......
答案 4 :(得分:0)
就持续的维护和支持而言,我认为只有选项1才对您有意义。 索引您需要的所有列但仅此而已。查看您的代码并查看表是如何加入表并索引列,否则需要进行表扫描。
Indicies将加快读取操作,但会减慢您的写入操作,因为您需要更新指标和列。他们还需要更多的空间。
如上所述,使用EXPLAIN查看查询的执行方式以及可在此处优化的内容。
最后,性能调优仅在您对现有性能进行基线测量,进行更改,然后再次基线性能以查看是否有帮助后才能正常工作。如果没有回滚并尝试别的东西。但始终以已知的性能水平开始,否则您最终可能会进行多项更改,从而导致总体运行速度变慢。祝你好运!