PHP MySQL如何提高性能和性能

PHP MySQL如何提高性能和性能,php,mysql,database,Php,Mysql,Database,我正在努力寻找最好的方法,以尽可能少的性能影响做到这一点 这是设置 带有搜索优化过滤器的搜索结果页面,该过滤器对返回新优化结果集的PHP处理程序进行AJAX调用 我有4个表,其中包含PHP处理程序代码中需要连接的所有数据 表1-包含主要细节的主要记录表 表2-专业评级公司1对每种产品的评级 表3-专业评级公司2对每种产品的评级 表4-专业评级公司3对每种产品的评级 搜索结果页面上的细化器是jquery滑块,每个滑块的范围从允许的最低评级到最高评级 移动滑块句柄时,将使用新值进行新的AJAX调用,

我正在努力寻找最好的方法,以尽可能少的性能影响做到这一点

这是设置

带有搜索优化过滤器的搜索结果页面,该过滤器对返回新优化结果集的PHP处理程序进行AJAX调用

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

表1-包含主要细节的主要记录表

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

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

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

搜索结果页面上的细化器是jquery滑块,每个滑块的范围从允许的最低评级到最高评级

移动滑块句柄时,将使用新值进行新的AJAX调用,数据库查询将运行以创建一组新的优化结果

从表1中获取我需要的数据是最简单的部分。我正在努力解决的是如何有效地在其他3个表中包含一个连接,并且只拾取与细化值/范围匹配的行。表2、3和4在2004-2012年都有多个列,当我最初尝试将它们全部放在一个查询中时,它陷入了困境

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

表2、3和4中的列是。。。 id-productID-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表中有很多字段,那么执行两个查询可能比合并更有用。这样做的原因是您正在获取冗余数据—每个连接的行都将具有product的列,即使您只需要它一次。这是连接的一个副作用,可能存在一个性能阈值,在这个阈值中,两次查询比连接更有用。由您决定是否/何时出现这种情况。

我们在最初的搜索中平均讨论了多少个结果?加载它们并使用JS进行过滤可能会更容易-跳过MySQL,使用Javascript进行过滤。当然,这取决于开始时记录的数量,因为您不想让浏览器陷入困境。感谢爷爷-我按照您的建议更改了我的表结构,加载了新查询,一切都很快。非常感谢。