我有一个带有产品的table hall_products。每个产品都有一个NAME,以指定的QUANTITY出售,并且仅限于CITY_CODE指向的一个城市。 现在下一个表是delivery_address。每个送货地址都是一个城市,它包含一个CITY_CODE和MAX_QUANTITY,它是可以发送到这个城市的产品的最大数量(无论什么产品)。
因此,例如,我有一个产品牛奶,数量为1升,并向城市发出代码为14,意思是柏林。 我可以发送到柏林(城市代码14)的最大数量的商品是0.7升。因为数量高于max_quantity,所以我将Milk送到柏林。
我想得到的是可以运往世界各地的所有商品的名称。因此,我需要获得符合目标城市max_quantity限制的所有商品。
我为此写了这个查询:
SELECT p.NAME FROM hall_products as p where p.QUANTITY >
(SELECT MAX_QUANTITY from delivery_address WHERE CITY_CODE = p.CITY_CODE )
但是这个查询太慢了。
如何在没有数据库架构更改的情况下加快速度,也就是更改查询?
答案 0 :(得分:2)
在一般情况下,连接被认为比嵌套查询更好。但有些情况下,嵌套查询的执行效果可能比连接更好。
尝试此查询并比较结果。
SELECT p.NAME
FROM hall_products as p, delivery_address as d
where p.QUANTITY < d.MAX_QUANTITY and d.CITY_CODE = p.CITY_CODE
答案 1 :(得分:0)
尝试
SELECT p.NAME
FROM hall_products as p, delivery_address as d
where p.QUANTITY > d.MAX_QUANTITY and d.CITY_CODE = p.CITY_CODE
如果您在QUANTITY和CITY_CODE
上有索引,这将再次正常工作答案 2 :(得分:0)
所以我需要获得符合目标城市max_quantity限制的所有商品。
在我的书中适应<=
,但我不是在maths.se,所以也许你知道我不知道的事情。
可以为结果的每一行运行子查询,它通常比创建JOIN慢。这是ANSI语法中的JOIN
SELECT p.NAME
FROM hall_products p
JOIN delivery_address a on a.CITY_CODE = p.CITY_CODE
where p.QUANTITY <= a.MAX_QUANTITY