为什么我的SQL语句花了这么长时间

时间:2013-10-24 12:16:31

标签: mysql phpmyadmin

我目前正在尝试使用php脚本从my(mysql)数据库导出一些数据,虽然我也在phpmyadmin的sql部分直接尝试了sql语句,结果相同。

我想要做的是从我的数据库中导出每个独特的产品,以及最便宜的总价格,其中有库存且价格(成本)大于0,即数量> 0和价格> 0

所以,我认为我已经找到了一些帮助,它似乎与一个小数据集一起使用,但此刻此表中有大约500,000行,它会增长。

所以我的陈述是:

SELECT 
products.name,
products.price,
products.quantity,
products.totalprice
FROM
products INNER JOIN
  (SELECT name, MIN(totalprice) min_price
   FROM products
   WHERE quantity>0 AND price>0
   GROUP BY name) m
  ON products.name=m.name AND products.totalprice=min_price

在phpmyadmin中,它只是提出“加载”状态,正如您所期望的那样,但实际上从未给我任何值。然后我必须“停止”mysql和apache(我正在使用xampp)然后重新启动它们,否则我无法在数据库中做任何事情。

如果有人能够看到声明的错误,那么听到任何建议都会很棒。

修改

我已经尝试过简单的sql语句,但他们似乎没有给我正确的答案。例如,我已经尝试过:

SELECT name, MIN(totalprice) min_price, quantity
   FROM products
     WHERE quantity>0 AND totalprice>0
   GROUP BY name

但正如你将从我的sql fiddle http://sqlfiddle.com/#!2/dd9f4/7/0

中看到的那样

这给了我不正确的值,也就是说它给了我最便宜的价格,数量大于0,但是数量的回报,列表中第一个数量大于0的值,因此为什么我不得不加入产品的产品 感谢

1 个答案:

答案 0 :(得分:0)

我认为此查询会返回您想要的内容(使用子查询而不是连接)。这个小提琴很快。这会在你的数据库中执行得足够快吗?如果它很大,你仍然可能需要索引。

select name, totalprice, quantity
from products P
where totalprice > 0
and totalprice = 
(select min(totalprice) 
                     from products where name = P.name 
                     and quantity > 0)