接近大型MySQL数据库组织的最佳方式?

时间:2011-02-23 23:33:20

标签: php mysql sql

我有一个关于相当大的MySQL数据库的一般方法的问题。我已经制作了一些PHP代码来与数据库进行交互。我正在尝试分析一大堆数据(~130k行,200列),并且一直在用不同的方法进行操作。我一直在学习很多东西,我觉得我已经接近将它设置为真的快速,但我仍然有点卡住。

我开始坚定地处于'卓越'的心态。我不断向数据集中添加越来越多的列,因为我试图选择各种各样的比特来进行统计分析。我制作的一些php / mysql脚本需要几个小时。

然后,至少基础工作,我了解了连接。这是我想的一点启示,但也导致我重新编写所有内容以使连接与我的数据一起发挥很好。最终的结果是性能的大幅提升 - 现在需要花费数小时才需要大约15秒。

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

现在,我在这里遇到的问题是:对我来说,更改数据库和应用程序的工作方式以便将所有这些不同的数据样本组合成一个大型表格会更好吗?到目前为止,我一直在试验这一点,它似乎并不比我正在使用的当前方法更快。

换句话说,运行大量涉及多表连接的“小”查询是否更好,正如我现在所做的那样,而不是涉及多表连接的单个巨大查询?我一直在检查查询的执行时间,似乎联接导致这种新方法的减速。

我的印象是,重复从PHP发送小查询到MySQL不仅仅是发送单个查询,但是对于更复杂的查询是否有一个转折点,而事实并非如此?看起来我是否达到了这一点?

2 个答案:

答案 0 :(得分:1)

如果您的JOIN查询已正确完成/索引,我认为最好使用它们。

答案 1 :(得分:1)

在PHP中进行查询优化并不是从数据库中获得最佳性能的方法。格式正确的SQL查询和MySQL的内置查询优化器可能会更好地完成工作。 (例如,MySQL中的查询优化器可以执行http://en.wikipedia.org/wiki/Block_nested_loop

之类的操作

但真正的答案取决于你想要做什么。如果速度是第一优先级,请列出您要查询的内容和数据架构。答案通常包括添加/删除索引和调整查询。

如果保持数据库占用空间小是您的目标(我非常怀疑磁盘空间有多便宜),请将所有内容标准化。