mysql - 我怎样才能加快这个MySQL查询?

标签 mysql subquery

我必须优化这个查询:

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/

相关文章:

mysql - Sql - 使用子查询更新 sql

php - 在 codeigniter 中使用 csrf 和 jquery cookie 登录时出错

Mysql 查询使用两个日期之间检索记录

mySQL SUBSTRING 在 WHERE 子句中有多个条件

mysql - 子查询和使用相关子查询引用外部的可能性

mysql - 结果集的子查询或条件逻辑

mysql - Magento 目录搜索查询说明

mysql:调用存储过程并收到错误。哪个命令导致了该错误?

mysql - 如何从子查询的外部查询执行多个连接和访问表

mysql - SQL 使用最大值连接两个表