2010-10-22 68 views
1

我正在为一些客户创建一个平台。每个客户需要有联系人并按组,类别(取决于组)和子类别(取决于类别)进行管理。如何优化我的数据库?

该数据库将会非常大,我害怕的表现。我想优化数据库;现在,我有以下选择:

  1. 管理多个表只有一个数据库(正如我们现在所管理)
  2. 为每个客户端创建一个数据库(每个数据库都会有相同的多个表的选项1)
  3. 管理多个XML文件(如选项2,每个客户都会有一个目录中的XML联系人,团体另一个XML文件,另一个用于类别,依此类推)

至极是性能最好的选择和数据管理(CRUD,创建,读取,更新,删除)?

谢谢!

+3

不要做#3。使用适当的数据库。 – JoshD 2010-10-22 19:29:49

回答

2

我认为一个拥有多个表的数据库是最好的选择,因为重复每个新客户端的数据库和模式不能很好地扩展。 XML文件听起来很酷,但到目前为止,我还没有看到一个XML读/写引擎,它与大多数RDBMS一样快,所以它就是那个。

为了使这项工作(一个数据库中的大量表),你应该注意索引和优化一个数据库;特别是指数将帮助您在扩大规模时保持速度。

+0

听起来不错!我要去学习,非常感谢! – pablomarti 2010-10-22 19:31:41

0

3不可取。搜索等不是XML文件有效的功能。

2是维护问题。

1应该是可行的。 “非常大”意味着什么?我有一个拥有15亿条目的tabe的数据库 - 这是“大”而不是“非常大”。你认为什么是非常大的?

+0

随着大我的意思是数百万条目,我的不好,谢谢!我要使用索引 – pablomarti 2010-10-22 19:34:25

+0

是的,请使用--The-Index-Luke.com :) – 2010-10-22 19:40:32

+0

@pablo:在这里也要特别注意聚簇索引。这是一本有用的教科书。 – 2010-10-22 19:55:53

1

在clienId上使用clustered indexing,无论哪个表中它可能作为外键存在。此过程将为您提供最佳的以客户端为中心的性能,因为您通常会在提取页面时拉取特定客户端的信息。

对于#2,我建议为您的客户提供优质的服务。如果他们想要在“他们自己的”单独服务器上“优先托管”,那么他们会支付额外的费用。这将使维修令人头疼值得。

0

你是否试过实际实现1(这是最简单的)?

  1. 您是否剖析了代码?
  2. 现在有什么表现?
  3. 使用EXPLAIN来查看查询是如何执行的?
  4. 您是否使用索引(通常正确的索引足以提供出色的性能更改)?

优化当您遇到瓶颈(或者当您设置某些性能基准时),而不是在设计阶段......

UPDATE:你提到的 “数百万条目”。对于mysql来说这没什么用处(只要你在表上使用正确的索引)。我有一张约有4000万行的桌子&,虽然它不闪电般快速,但它在几秒钟内给我带来了结果。所以你去...

0

就持续的维护和支持去我认为只有选项1对你有意义。 索引你需要的所有列,但没有更多。看看你的代码,看看表是如何加入并索引列,否则需要表扫描。

Indicies将加快读取操作,但是当你需要更新indicies以及列减慢你的写操作。他们还需要更多的数据库空间。

如上所示,使用EXPLAIN来查看您的查询如何执行以及可以在哪里进行优化。

最后性能调优只能好你基线后,现有的成效,做出改变,然后再次基准性能,看它是否有帮助。如果不回滚并尝试其他的东西。但总是从一个已知的性能水平开始,否则你可能最终会做出多项改变,总的来说,这些改变会让事情缓慢下来。祝你好运!