php - 高效的mysql查询产品目录

标签 php mysql

所以我有一个带有产品目录的网站,该页面有 4 个产品 slider ,一个用于最新产品,另一个用于畅销产品,第三个用于特价商品。

是否最好为每种类型的 slider 创建一个查询,或者我应该获取所有产品,然后让 php 对它们进行排序并将它们分成三个不同的数组,每个 slider 一个?

目前我正在做

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 上有关查询优化的数千个问题。

关于php - 高效的mysql查询产品目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40190520/

相关文章:

php - $_FILES 为空,$_POST 为空数组

php - mysql日期行到列然后以周显示

java - 如何在MySQL上插入Java数据

mysql - Django MySQL 'utf8' 目前是字符集UTF8MB3的别名,将被UTF8MB4取代

mysql - 为了 Heroku,从 MySQL 切换到 PostgreSQL for Ruby on Rails

mysql - SQL中UNION之后的WHERE语句?

php - 无法在 laravel 5.1 中使用外观调用方法

php - Docker 图像推送但我的音量不持久

php - 如何在 php for mysql 中使用数组值或类似的东西选择数据?

php - 停止在 php 中输出动态 ul 列表中的一项