2011-02-23 114 views
1

我有一个问题涉及到一个很大的MySQL数据库的一般方法。我做了一些php代码来与数据库交互。我试图分析一组庞大的数据(~13万行,200列),并且一直在用不同的方法来做这件事。我一直在学习很多东西,而且我觉得我很快就能将它设置为真的,但我仍然有点卡住。处理大型MySQL数据库组织的最佳方式?

我从坚定的'excel'思维开始。我不断地向数据集中添加越来越多的列,因为我试图为了统计分析的目的而选择各种各样的数据。我所做的一些php/mysql脚本花费了数小时。

然后,至少基本工作,我了解到了连接。这是我猜想的一点启示,但也导致我重写所有内容,以便加入我的数据。最终的结果是性能大幅增加 - 现在需要几个小时才花了大约15秒。

与几个人聊天后,我得出的结论,我仍然可以使其更快。我建立的方式是,不同的数据样本都包含在不同的表中。每个表格都有一个数据汇总在另一个表格中,该表格用作联接的一部分 - 有关该特定数据集的一般信息存储在该辅助表格中,以便于访问并提高速度。现在

,我这里的问题是这样的:这将是我最好的方式来改变我的数据库和应用工作,使数据的所有这些不同的样本组合成一个单一的,大表?我一直在尝试这一点,但它似乎并没有比我现在使用的方法更快。

换句话说,现在我正在执行涉及多表连接的大量“小”查询,而不是涉及多表连接的单个巨大查询,是否更好?我一直在检查查询的执行时间,看起来连接正在导致这种新方法的放缓。

我的印象是,从PHP重复发送小型查询到MySQL并不像发送单个查询那么优化,但是对于更复杂的查询,如果不是这种情况,是否有一个转折点?我是否已经达到了这一点?

+1

那么它取决于你使用的存储引擎以及你如何索引表。等式有两个方面:1.您使用的实际模式和2.您发布的每个查询。两者都可以优化。 – prodigitalson 2011-02-23 23:37:45

+0

好吧,这是很好的知道。这些不同的数据样本的主要问题是,没有简单的方法来标准化它们,因为它们中的每一行都是完全独特的。目前,它们使用唯一的行ID(主键)和一组3-4个索引列进行索引,这些索引列定期用作SELECT查询的一部分。但是,即使目前的更新似乎也需要很长时间 - 对于更大的表,使用SELECT INTO来提高速度会更好吗? – vize 2011-02-23 23:53:32

回答

1

做查询优化是不是走出DB性能最好的方式。格式正确的SQL查询和MySQL的内置查询优化器可能会更好地完成这项工作。 (例如,在MySQL查询优化器可以做的事情一样http://en.wikipedia.org/wiki/Block_nested_loop

但真正的答案取决于你想做什么。如果速度是首要任务,请列出您要查询的内容和数据模式。答案通常涉及添加/删除索引并调整您的查询。

如果维持数据库占用小是你的目标(我很怀疑给出的磁盘空间怎么便宜),一切恢复正常。

+0

好吧,这是伟大的知道 - 这是一个有点凌乱的时刻,但总的来讲,是它的最好的,以确保参加对索引列与其他索引的列(S)的情况下? – vize 2011-02-24 00:35:53

+1

在您只对数据子集感兴趣的大型表格中,这通常是一种很好的做法。但这一切都依赖(对不起,这是无益的)。数据库优化就像一个国际象棋游戏。例如,在列上保留索引不是免费的。插入将花费更长的时间来执行。锁定可能会发生,等等。但在另一方面有时值得付出这样的代价。 – Saurav 2011-02-24 00:44:52

1

如果你的连接查询完成/索引正确,我想他们会更好地使用。在PHP

+0

啊,我想到了 - 更多的是,我不知道该做什么比其他任何事情! – vize 2011-02-24 00:27:29

相关问题