如何加快执行此查询(子选择)?

时间:2014-04-15 06:49:17

标签: mysql performance

这是我的查询,它的运行速度非常慢。如何提高性能?也许使用连接代替sunselects?

select 
sfoa.firstname, 
sfoa.lastname, 
sfo.increment_id 
from sales_flat_order_address sfoa 
join sales_flat_order sfo 
on sfoa.parent_id = sfo.entity_id 
where parent_id 
in 
(
SELECT
order_id
FROM 
(
SELECT
  sfoi.order_id,
  GROUP_CONCAT(sfoi.sku SEPARATOR ', ') AS skus
  FROM sales_flat_order_item sfoi
  GROUP BY sfoi.order_id) t
  WHERE t.skus LIKE '%whatever%'
  AND t.skus RLIKE '[0-9]'
);

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

是的,带有子查询的IN速度很慢。请改用join

  

每次评估它们时都会执行子查询(无论如何,在MySQL中,并非所有RDBMS),即你基本上运行了700万个查询!如果可能,使用JOIN会将此值减少为1.即使添加索引可以提高性能,也可以运行它们。

<强> https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html