【问题标题】:Will lots of small sql statements slow my site down significantly大量的小 sql 语句会显着降低我的网站速度吗
【发布时间】:2012-04-25 21:57:00
【问题描述】:

我有一个包含 25-30 个类别的 zen-cart。在网站的首页上,每个类别都有自己的小区域,其中将显示该类别中最畅销的 4 种产品。

作为一个菜鸟,我能想到的最好方法是为每个类别设置一个 sql 语句,每次页面加载时都会挑选出最畅销的产品。我在某处读到最好限制sql语句的数量,以免影响站点速度。

这样做会慢很多吗?

有没有更明智的方法来做到这一点?

【问题讨论】:

  • 你不能用更复杂的查询来做到这一点吗?架构怎么样?
  • 像往常一样,这个问题的答案是“视情况而定”。如果您有一个工作站点,最好的回答方法是进行一些更改,看看它们有什么效果。首先,我会在旅途中获得一些 HTML 片段缓存,因为这会给您带来巨大的胜利(比任何查询都好),然后再尝试一些 SQL 更改。一般来说,对于简单的查询,最好限制单个查询的数量,因此一个获得四行的查询通常比四个单独的查询要好。
  • 经验法则:如果您可以通过单个查询实现多个查询将实现的相同目标,请使用单个查询。这也有例外,但它们很少而且相差甚远。如果您有一些真的复杂的东西,或者涉及/需要一个或多个 MySQL UDF 的东西,那么 可能 可以将它分成多个查询。一般来说,更少的查询会更好,因为发送查询/数据库解析它/数据库查找结果/数据库返回它们/PHP 解析结果集所涉及的额外开销。如果您只使用一个查询,那么这一切只会发生一次。
  • 您好,感谢您的回复,数据库架构是:zen-cart.com/wiki/index.php/Developers_-_Database_Schema 但我不知道如何限制每个类别的结果。 @halfer 我得去google一下关于html片段缓存的问题,因为我不知道那是什么,但听起来很有用:)
  • HTML 缓存 -> 它基本上是从数据库中生成 HTML 的 sn-p(如畅销书信息及其图像标签),然后在预设时间内自动使用该 sn-p(例如,接下来的 12 小时,因为畅销的东西不会经常改变)。您可以为此使用本地文件系统,也可以使用 memcache 来快速获取它。我不知道this module,但听起来不错。

标签: php mysql sql zen-cart


【解决方案1】:

这在很大程度上取决于支持您网站的服务器。但是 25 到 30 个查询应该不会对页面性能产生重大影响。

更好的方法是设计一个数据库查询,通过一个查询获取所有项目。但为了帮助您这样做,我们需要您的数据库架构。

此外,如果您必须执行许多类似的查询,则可以选择使用“准备好的查询”,这通常会大大提高性能。

毕竟一般来说,如果您是使用数据库的新手,通常最好设计更多一些易于构建且可以由您处理的小型查询,然后设计一个可能包含错误的大型查询和可能会比多个小查询减慢数据库速度。

【讨论】:

  • 您好,感谢您的回答,可以在此处查看 DB 架构:zen-cart.com/wiki/index.php/Developers_-_Database_Schema - 看起来有可能吗?!?
  • 我非常有信心这是可能的。如果您告诉我您现在使用的查询来从单个类别中找出要显示的产品,我会试一试。
  • 您好,再次感谢。我实际上还没有查询,我试图首先找出这是否可能!就 sql 而言,我是一个学习驱动程序。
猜你喜欢
  • 2020-04-21
  • 2011-12-15
  • 1970-01-01
  • 2012-11-30
  • 2022-10-19
  • 2017-10-13
  • 2021-04-08
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多