【发布时间】: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,但听起来不错。