Php 如何提高具有多个Where条件和Order By的查询速度?

Php 如何提高具有多个Where条件和Order By的查询速度?,php,mysql,sql,sql-server,loops,Php,Mysql,Sql,Sql Server,Loops,我已经存储了创建基于颜色、重量和质量的产品所需的所有属性的排列和组合,并将其存储在属性表中 在程序中,我循环此表中的数据,并创建Select sql查询另一个表,该表包含基于属性的产品价格,并将其存储在第三个表中 我假设属性表中有7000条记录,价格表中有200万条记录。 因此程序循环到7000条记录,每个select SQL查询2Lakh记录 Select SQL包含多个Where子句和一个Order by on Price以获取最低价格 我的问题是如何减少查询执行时间 例如:- 属性表 sn

我已经存储了创建基于颜色、重量和质量的产品所需的所有属性的排列和组合,并将其存储在属性表中

在程序中,我循环此表中的数据,并创建Select sql查询另一个表,该表包含基于属性的产品价格,并将其存储在第三个表中

我假设属性表中有7000条记录,价格表中有200万条记录。 因此程序循环到7000条记录,每个select SQL查询2Lakh记录

Select SQL包含多个Where子句和一个Order by on Price以获取最低价格

我的问题是如何减少查询执行时间

例如:-

属性表

sno  color      Quality  Weight
1      blue     Good       3kg
2      red      Fair        1kg   
3      Yellow   Excellent   1.5Kg
价格表

sno     color     Quality    Weight(in kgs)    Market Price  Our Price 
1      sky blue    Good       4                 $400           $360
2      orange red  Excellent  2                 $500           $450
红色I商店的价格表-深红色、橙红色等

但属性我有红色bcoz红色是主要颜色,在市场上你不会得到完美的红色。 所以,我给产品接近红色和更便宜的红色组

select * from tbl_price 
where color IN {Array [tbl data Entry i.e. RED ]    gives-> ( "Crimson Red", "Orange Red","Carrot Red" )}
AND Quality IN {Array [tbl data Entry i.e. Good ] gives-> ("Above Average","Medium","Not Bad" )}
AND Weight >= {tbl Entry of Weight}
Order by OurPrice ASC
LIMIT 1,1;
quote:程序循环到7000条记录,每个select SQL查询2Lakh记录

这听起来像是在处理RBAR行,通过折磨行并运行7000个查询

在SQL中,将行作为一个集合进行处理并运行一个返回所需结果集的查询通常效率更高

发出SQL语句客户端发送SQL文本、服务器解析文本、执行语法检查、执行语义检查、选择执行计划,然后执行计划、准备结果集、将结果返回给客户端都会带来开销

对于数千次查询执行,语句处理开销可能占总运行时间的很大一部分,无论实际查询的运行效率如何

我完全有可能误解了你说的话

奇怪的是,您的示例查询显示了一个LIMIT 1,1子句。这将跳过结果集中的第一行。这似乎有点奇怪,因为你说你想要最低的价格,而不是第二低的价格

使用MySQL,可以使用EXPLAIN查看执行计划;这可能有助于深入了解性能问题。有时,添加适当的索引可能会显著提高性能。但是,在这种情况下,如果您试图改进的查询是搜索包含两行的表,那么任何索引都不太可能对性能产生任何影响


总之,为了提高性能,如果要执行7000个查询,请重新设计,以便将所有7000行作为一个集合进行处理。一个返回结果的查询可能会更有效。

在我们知道确切的情况和您想要实现的目标之前,很难给出准确的解决方案

一般的回答是

尝试在基于集合的查询中转换它。如果您需要的输出不能在一个集合查询中完成,那么请考虑一个循环,但仍然使用集合。循环的可能性很小

根据您的回答,可能存在比循环更快的自连接可能性

或者你可能不得不退一步考虑数据模型


最后,如果在DB级别无法执行任何操作。。。在中间层中获取数据,根据需要处理并将输出放入表中。。我相信这个选项会比在DB级别做事情好得多。。我很少有这样的经历。

颜色、质量、重量和价格都有索引吗?