MySQL中的嵌套查询非常慢。如何优化它?
我有一张桌子,上面有产品。每种产品都有一个名称,按规定数量出售,并且仅向城市代码所指的一个城市出售。 现在下一个表是交货地址。每个送货地址都是一个城市,它包含一个城市代码和最大数量,这是可以发送到此城市的产品的最大数量(无论是什么产品) 例如,我有一种产品牛奶,数量为1升,地址是城市,代码为14,意思是柏林。 我能送到柏林的货物的最大数量(城市代码14)是0.7升。然后我把牛奶运到柏林,因为数量比最大数量高 我想得到的是所有可以运往世界任何地方的货物的名称。所以我需要得到所有符合目标城市最大数量限制的商品 我写了这个查询:MySQL中的嵌套查询非常慢。如何优化它?,mysql,sql,performance,Mysql,Sql,Performance,我有一张桌子,上面有产品。每种产品都有一个名称,按规定数量出售,并且仅向城市代码所指的一个城市出售。 现在下一个表是交货地址。每个送货地址都是一个城市,它包含一个城市代码和最大数量,这是可以发送到此城市的产品的最大数量(无论是什么产品) 例如,我有一种产品牛奶,数量为1升,地址是城市,代码为14,意思是柏林。 我能送到柏林的货物的最大数量(城市代码14)是0.7升。然后我把牛奶运到柏林,因为数量比最大数量高 我想得到的是所有可以运往世界任何地方的货物的名称。所以我需要得到所有符合目标城市最大数量
SELECT p.NAME FROM hall_products as p where p.QUANTITY >
(SELECT MAX_QUANTITY from delivery_address WHERE CITY_CODE = p.CITY_CODE )
但是这个查询太慢了
如何在不更改数据库模式的情况下(即仅更改查询)使其更快?试试看
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
如果您有数量和城市代码的索引,那么这将再次正常工作。在一般情况下,连接被认为比嵌套查询更好。但在某些情况下,嵌套查询的性能可能优于连接 尝试此查询并比较结果
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
选择p.NAME
从hall_products作为p,交货地址作为d
其中p.QUANTITY
所以我需要得到所有符合目标城市最大数量限制的商品
Fit-into-means
你能添加explain的输出吗?这就是你实际使用的查询吗?对我来说,这似乎是个奇怪的问题。。嵌套查询中的双from
和*
使它看起来工作不太好…查询根本不会运行。在使用
操作符时,不允许在子选择中返回多个列(实际上,我认为在MySQL中,在MySQL中,在子选择中返回多个列是不可能的)。不仅查询不会运行,示例也是错误的:数量为1升的产品牛奶。。。我能送到柏林的货物的最大数量(城市代码14)是0.7升。然后我把牛奶运到柏林,因为数量低于我投票反对的最大数量。@gnur,@a_horse_,没有名字-查询时出错,现在没事了。
SELECT p.NAME
FROM hall_products p
JOIN delivery_address a on a.CITY_CODE = p.CITY_CODE
where p.QUANTITY <= a.MAX_QUANTITY