产品目录的高效mysql查询
所以我有一个产品目录的网站,这个页面有4个产品滑块,一个用于最近的产品,另一个用于畅销书,第三个用于特别优惠。产品目录的高效mysql查询
为每种类型的滑块创建查询会更好吗?还是应该获取所有产品,然后让PHP对它们进行排序并将它们分离为三个每个滑块一个的distict数组?
目前我只是做
SELECT * FROM products WHERE deleted = 0
进行测试。
几乎总是最好的方式来优化查询,以便它不仅返回实际需要的记录,而且还只返回真正需要的记录。所以,在你的情况下,这看起来像
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的查询优化的几千个问题。
虽然这里没有什么技术上的错误,并且它充满了有用和真实的信息 - 我觉得它完全忽略了这一点。 – Strawberry
@Stawberry与问题中的有限细节它是我能做的最好的 - 我试图1)解释与这种“批量请求”相关的扩展问题2)经常使用的查询应该由索引和3 )如果db似乎表现不佳,则需要分析发生了什么,大多数性能问题可以使用标准方法或改进的查询来解决。这至少应该让OP开始他们的研究。你觉得我错过了什么重点? – fvu
呃,这个问题。无论是执行一个查询还是执行一个查询,这个更高贵 – Strawberry
一般来说,数据库的往返次数越少越好。有例外。但那应该是你的出发点。 – Strawberry