我必须优化这个查询:
SELECT DISTINCT
sfo.entity_id,
sfo.created_at,
sfoa.postcode,
sfo.customer_id
FROM sales_flat_order sfo
JOIN sales_flat_order_address sfoa
ON sfo.entity_id = sfoa.parent_id
WHERE sfo.entity_id IN (SELECT DISTINCT
order_id
FROM sales_flat_order_item
WHERE sku = 'whatever'
OR sku = 'whatever1')
这会运行一段时间,我猜是因为子选择。我知道在这里使用 join 可能会加快速度,但到目前为止我没能让它发挥作用。关于如何加快速度的任何想法?
谢谢!
最佳答案
我会把它作为一个额外的加入级别。
像这样:-
SELECT DISTINCT
sfo.entity_id,
sfo.created_at,
sfoa.postcode,
sfo.customer_id
FROM sales_flat_order sfo
INNER JOIN sales_flat_order_address sfoa
ON sfo.entity_id = sfoa.parent_id
INNER JOIN sales_flat_order_item sfoi
ON sfo.entity_id = sfoi.order_id
WHERE sku IN ('whatever', 'whatever1')
假设您在 sales_flat_order_item 表的 sku 字段上有一个索引,在 sales_flat_order 表上的 entity_id 上有一个索引,在 sales_flat_order_address 表上的 parent_id 上有一个索引,那么这应该很快。
如果没有索引,几乎任何查询都会运行得很慢。
关于mysql - 我怎样才能加快这个MySQL查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26796602/