网站策略:关于有多少SQL查询就足够了的问题

时间:2009-05-27 05:52:02

标签: mysql

我最近开始推出并慢慢推出自制的CMS。该网站允许进行大量定制,以实现国际化和自定义化,不需要源代码。这是一个个人项目,整个意图是看我能在多大程度上推动我自己的编程限制(处理博客,webcomic和一个小论坛的CMS的分配问题不是我愿意的考虑一下,直到我把它清理干净并进行更多工作 - 同时,看到它是一个业余项目,我怀疑它与其他更精致的项目相比有任何重力......但这些不是涉及到的主题手头的话题。)

我已经建立了一系列代码,可以让我看到每个页面的生成速度和运行的查询数量;平均而言,我看到9-13,每页执行12次MySQL查询。生成页面的平均时间介于10-20毫秒之间。现在,没有任何专业设计经验,我应该努力的最佳选择是什么?

有什么方法可以减少生成时间(或平均15毫秒/页,这甚至不是问题),或减少大多数内容加载的页面上的查询数量的策略一个MySQL数据库,包括菜单项等。

请注意,这是一个非常广泛的问题;我不打算提出一般性问题或激发对话,而是找出减少这种系统可能创建的服务器上的负载(如果有的话)的方法。

3 个答案:

答案 0 :(得分:2)

  • 使用 PHP opcode cache 可以大大减少打开和编译PHP脚本所需的时间,方法是将解析和编译跳过字节码。

  • 启用 MySQL query cache 通常(但并不总是)是一个好主意。

  • 不要专注于查询数量,而是通过优化查询来减少查询所需的时间。与尝试减少查询数量相比,拥有大量小型优化查询通常效率更高。

  • 使用分析器,例如内置于XDebug的内容。与KCacheGrind或WinCacheGrind等解释器一起,当您知道要关注什么时,优化代码确实很有帮助。优化一些对总执行时间的贡献微不足道的东西是不值得的。值得了解* CacheGrind中的所有内容。

我的PHP内容管理系统通常在大约相同的时间内加载一个页面(最低至8ms,其中一切都是缓存命中)。但非常偶尔,当你做一些复杂的事情时,它可能需要超过500毫秒。当关注用户体验时,典型的时间更重要,而不是异常值,但是当关注服务器负载时平均时间更重要,因此那些500ms异常值突然非常重要。

答案 1 :(得分:0)

如果您主要是为小公司开发这些网站或其他您没有预测或想象高流量的原因(即没有像Digg / Facebook /等),那么平均15毫秒应该没问题。

请问12个查询的用途是什么?我想它们是用于获取菜单项,获取页面内容等。有各种组合/优化查询的方法,所以如果您发布一些我(和其他堆栈器)可能能够帮助您优化查询。

答案 2 :(得分:0)

这取决于......因为它总是与性能问题有关,如果系统目前满足您的性能要求,那么不要太担心。

通常,如果您的页面生成时间是15毫秒,那么它只是用户体验到的总点击次数的一小部分,请参阅yahoo exception performance pages为了获得最快速度,还需要注意其他事项可能的页面加载时间。

在服务器上,db可能会将结果缓存到几乎所有(如果不是所有)正在运行的查询中,因此页面计时非常快。您可能希望加载更大的数据集(如果您还没有这样做来测试应用程序),您可能会发现性能会随着数据集的大小而降低。