【问题标题】:Website tactics: A question about how many SQL queries are enough网站战术:一个关于多少 SQL 查询就足够的问题
【发布时间】:2023-04-09 21:54:01
【问题描述】:

我最近开始推出并慢慢推出自制的 CMS。该站点允许进行大量定制,并朝着国际化和定制的方向发展,无需源代码。这是一个个人项目,整个目的是看看我能把自己的编程限制推到多远(处理博客、网络漫画和小型论坛的 CMS 的分发问题不是我愿意做的考虑一下,直到我清理它并对其进行更多工作 - 同样,鉴于它是一个业余项目,我怀疑它与其他更精致的项目相比是否有任何重要性......但这些不是关注的主题手头的话题。)

我编写了一系列代码,让我可以查看每个页面的生成速度以及运行了多少查询;平均而言,我看到每页执行 9 到 13 个,最多 12 个 MySQL 查询。生成页面的平均时间在 10-20 毫秒之间。现在,没有任何专业设计经验,我应该争取的最佳状态是什么?

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

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

【问题讨论】:

标签: mysql


【解决方案1】:
  • 使用 PHP opcode cache 将跳过解析和编译为字节码的过程,从而大大减少打开和编译 PHP 脚本所需的时间。

  • 打开 MySQL query cache 通常(尽管并非总是)是个好主意。

  • 与其关注查询数量,不如关注通过优化查询来减少这些查询所花费的时间。与尝试减少查询数量相比,拥有大量优化的小型查询通常效率更高。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 时间已经很晚了,我还有不到八小时就要开会,所以要先睡觉。但我一定会尽快发布有关查询详细信息的信息。
    【解决方案3】:

    这取决于...与性能问题一样,如果系统当前满足您的性能要求,请不要太担心。

    通常,如果您的页面生成时间为 15 毫秒,则它只是用户体验到的总点击到玻璃时间的一小部分,请参阅yahoo exception performance pages 为了获得尽可能快的页面,还需要查看其他内容加载时间。

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

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2023-03-31
      • 1970-01-01
      • 2023-04-11
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      相关资源
      最近更新 更多