我该如何优化我的数据库?

时间:2010-10-22 19:25:46

标签: mysql xml database performance

我正在为一些客户创建一个平台。每个客户都需要有联系人,并按组,类别(取决于组)和子类别(取决于类别)进行管理。

数据库将会非常庞大​​,我担心性能问题。我想优化数据库;现在,我有这些选择:

  1. 仅管理一个包含多个表的数据库(我们现在管理)
  2. 为每个客户端创建一个数据库(每个数据库将具有与选项1相同的多个表)
  3. 管理多个XML文件(如选项2,每个客户端都有一个目录,其中包含用于联系人的XML,另一个用于组的XML文件,另一个用于类别,等等)
  4. 这是数据性能和管理的最佳选择(CRUD,创建,读取,更新,删除)??

    谢谢!

5 个答案:

答案 0 :(得分:2)

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

为了使这项工作(在一个数据库中有许多表),你应该注意索引和优化一个数据库;索引特别有助于您在扩展时保持速度。

答案 1 :(得分:1)

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

对于#2,我建议为您的客户提供优质服务。如果他们想在“他们自己”的单独服务器上“优先托管”,那么他们需要额外付费。这将使维护问题变得有意义。

答案 2 :(得分:0)

3是不可取的。搜索等不是XML文件高效运行的。

2是维护问题。

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

答案 3 :(得分:0)

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

  1. 您是否对代码进行了分析?
  2. 现在有什么表现?
  3. 使用EXPLAIN查看查询的效果如何?
  4. 您是否使用索引(通常正确的索引足以提供出色的性能变化)?
  5. 当您遇到瓶颈时(或者当您为性能设置某些基准时)优化,而不是在设计阶段......

    更新:您提到“数百万条目”。这对于mysql来说没什么用(假设你在表上使用了正确的索引)。我有一张大约有4千万行的桌子。虽然它没有闪电般的速度,它可以在几秒钟内给出结果。所以你去......

答案 4 :(得分:0)

就持续的维护和支持而言,我认为只有选项1才对您有意义。 索引您需要的所有列但仅此而已。查看您的代码并查看表是如何加入表并索引列,否则需要进行表扫描。

Indicies将加快读取操作,但会减慢您的写入操作,因为您需要更新指标和列。他们还需要更多的空间。

如上所述,使用EXPLAIN查看查询的执行方式以及可在此处优化的内容。

最后,性能调优仅在您对现有性能进行基线测量,进行更改,然后再次基线性能以查看是否有帮助后才能正常工作。如果没有回滚并尝试别的东西。但始终以已知的性能水平开始,否则您最终可能会进行多项更改,从而导致总体运行速度变慢。祝你好运!