【发布时间】:2015-11-10 22:26:38
【问题描述】:
我有两张桌子,即
t_productspecificprice 里面有折扣
和t_productcategory 映射productids 和categoryids
t_productspecificprice 可以为一个productid 添加多个折扣,但最近添加的折扣只是相关的。
t_productspecificprice 有大约 450000 条记录,并且
t_productcategory 有 ~350000+ 条记录。
我需要针对特定categoryid 的每个productid 的最新折扣。
下面的查询不起作用,phpmyadmin 中的错误 504。
查询:
select
a_categoryid as 'Category Id',
t_productcategory.a_productid as 'Product Ids',
t_productspecificprice.a_reduction,
t_productspecificprice.a_reductiontype,
t_productspecificprice.a_to
from t_productcategory
left join t_productspecificprice on t_productspecificprice.a_productid = t_productcategory.a_productid
left join
(SELECT max(a_productspecificpriceid) as a_productspecificpriceid FROM t_productspecificprice
GROUP by a_productid
)
as discounts on discounts.a_productspecificpriceid = t_productspecificprice.a_productspecificpriceid
where a_categoryid = 4
架构:
有人可以优化吗?
【问题讨论】:
-
我建议显示表格架构,而不是在文本中多说。为了更好地理解。
-
您的架构不包含有关索引的信息
-
您遇到了 504 超时,可能是因为您的查询耗时过长。问:您在超时发生之前等待了多长时间?问:你们有什么指标? Q:你有没有做过“演出计划”?请阅读这些文章:dev.mysql.com/doc/refman/5.0/en/using-explain.html 和 dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html。请使用 1) 索引信息和 2) 解释信息更新您的帖子。
-
添加索引信息
-
discounts左连接有什么意义?您没有从表格中选择任何内容,它是left join,因此您也没有将其用作过滤器
标签: php mysql sql database optimization