产品目录的高效mysql查询

问题描述:

所以我有一个产品目录的网站,这个页面有4个产品滑块,一个用于最近的产品,另一个用于畅销书,第三个用于特别优惠。产品目录的高效mysql查询

为每种类型的滑块创建查询会更好吗?还是应该获取所有产品,然后让PHP对它们进行排序并将它们分离为三个每个滑块一个的distict数组?

目前我只是做

SELECT * FROM products WHERE deleted = 0 

进行测试。

+0

一般来说,数据库的往返次数越少越好。有例外。但那应该是你的出发点。 – Strawberry

几乎总是最好的方式来优化查询,以便它不仅返回实际需要的记录,而且还只返回真正需要的记录。所以,在你的情况下,这看起来像

SELECT id, description, col3 
FROM products 
WHERE deleted = 0 
AND -- conditions that make it fit in the proper slider 

的原因是,它的成本也资源(时间和带宽)传输设置转移到处理程序和处理时间来评估个体的回报记录的结果,因此查询的“成本”将随着表大小而变化,而不是实际需要的数据集的大小。

只是一个例子,但让我们假设您想要创建一个前10名卖家名单,并且您的故事中有100个项目。您将检索100条记录并保留10个。没什么大不了的。现在,你的店铺增长了,你有100000件商品。对于你的前10名,你必须翻阅所有论文并丢弃99990条记录。 99990记录您将有数据库服务器读取并传输给您,并且99990记录您必须单独检查以查看它是否是前10个项目。

由于这种类型的查询将经常执行,因此通过索引搜索列来优化它们也是一个好主意,因为数据库服务器中的索引搜索速度更快。

我说:“几乎总是”因为有罕见箱子,你也很难表达SQL你真正需要的,或者你需要使用相当奇特的技术,如查询提示来强制数据库引擎执行以合理有效的方式查询您的查询。但是这些情况相当少见,而且当查询没有按预期执行时,通过一些分析,您将在大多数情况下改进其性能 - 查看关于SO的查询优化的几千个问题。

+1

虽然这里没有什么技术上的错误,并且它充满了有用和真实的信息 - 我觉得它完全忽略了这一点。 – Strawberry

+0

@Stawberry与问题中的有限细节它是我能做的最好的 - 我试图1)解释与这种“批量请求”相关的扩展问题2)经常使用的查询应该由索引和3 )如果db似乎表现不佳,则需要分析发生了什么,大多数性能问题可以使用标准方法或改进的查询来解决。这至少应该让OP开始他们的研究。你觉得我错过了什么重点? – fvu

+0

呃,这个问题。无论是执行一个查询还是执行一个查询,这个更高贵 – Strawberry