gpt4 book ai didi

PHP MySQL 操作方法和性能

转载 作者:行者123 更新时间:2023-11-29 08:47:48 25 4
gpt4 key购买 nike

我正在努力寻找最好的方法来尽可能减少性能影响。

这是设置...

带有搜索细化过滤器的搜索结果页面,这些过滤器对 PHP 处理程序进行 AJAX 调用,返回一组新的(细化的)结果。

我有 4 个表,其中包含我需要在 PHP 处理程序代码中连接到的所有数据。

表 1 - 包含主要详细信息的主记录表

表 2 - 来自专业评级公司 #1 的每种产品的评级

表 3 - 专业评级公司 #2 对每种产品的评级

表 4 - 专业评级公司 #3 对每种产品的评级

搜索结果页面上的细化器是 jquery slider ,其范围从允许的最低评分到每个评分的最高评分。

移动 slider handle 时,将使用新值进行新的 AJAX 调用,并且将运行数据库查询以创建一组新的优化结果。

从表 1 中获取我需要的数据是比较容易的部分。我正在努力解决的是如何有效地在其他 3 个表上包含联接,并仅选取与细化值/范围匹配的行。表 2、表 3 和表 4 都有年份(2004-2012)的多个列,当我最初尝试将所有内容放入一个查询中时,它陷入了困境。

表 2、3 和 4 保存表 1 中每条记录的各种评级。

表 2、3 和 4 中的列是...id - 产品ID - y2004 - y2005 - y2006 - y2007 - ...你明白了。

每年列的每条记录都有一个数值(默认值为 0)。

我需要做的是同时有效地选择与用户在所有 4 个表中选择的精简范围相匹配的记录。

精炼器搜索的示例是...从表 1 中获取所有记录,其中价格在 25 美元到 50 美元之间,并且表 2 记录的评级(来自任何年份/列)在 1 - 4 之间,并且表 3 记录的评级为评级(来自任何年份/列)在 80 - 100 之间,并且表 4 记录的评级(来自任何年份/列)在 80 - 100 之间。

关于如何以尽可能高的性能进行设置有什么建议吗?

最佳答案

我的建议是使用不同的表结构。您应该将表 2、表 3 和表 4 合并为一个具有以下结构的评级表:

id | productID | companyID | year | rating

然后您可以将查询重写为:

SELECT *
FROM products p
JOIN ratings r ON p.id = r.productID
WHERE p.price BETWEEN 25 AND 50
AND (
( r.companyID = 1 AND r.rating BETWEEN 1 AND 4 )
OR ( r.companyID = 2 AND r.rating BETWEEN 80 AND 100 )
OR ( r.companyID = 3 AND r.rating BETWEEN 80 AND 100 )
)

这样性能肯定会提高。此外,您的表格将更具可扩展性,无论是年份还是公司数量。

还有一件事:如果您的 products 表中有很多字段,执行 2 个查询而不是联接可能更有用。原因是您正在获取冗余数据 - 每个连接的行都将包含 product 列,即使您只需要一次。这是联接的副作用,并且可能存在性能阈值,在该阈值中查询两次比联接更有用。由您决定是否/何时出现这种情况。

关于PHP MySQL 操作方法和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com