无法使用subselect和aggregate函数优化sql

时间:2016-10-27 12:42:15

标签: mysql

我有以下架构

订单(100K +行)

{{ Form::select('subcategories', $subcategories, null, ['class'=>'form-control']) }}

篮子(400K +行)

id (primary, auto increment)
order_date (datetime, indexed)
extra index for order (id + order_date)

我的输入是最小日期和产品ID数组。 我需要获得包含这些产品的订单,从这些订单中获取产品的数量,不包括产品的输入数组,并返回最畅销的8个产品(count()desc)

最多?我能想出的优化的sql语句是

id (primary, auto increment)
order_id(int, indexed)
product_id (int, indexed)

extra keys for basket 

执行查询需要4秒,而我所有其他查询都不到0.02秒。

我找不到使用explain的错误 - 似乎是使用索引,所有执行时间都花在创建的表上(括号内的sql) - 不在group by中。

任何人都可以提出另一种更快的方法来获取所需的结果,或者在我的sql语句中解释我的错误并且花了这么多时间吗?

SELECT new.product_id  
from (
    select product_id AS product_id
    from shop_order_basket 
    where order_id IN (
        select order_id 
        from shop_order_basket 
        join shop_order on shop_order.id = shop_order_basket.order_id 
        where product_id IN (1,2) and entry_datetime > "2016-09-27 00:00:00"
    ) 
    and product_id NOT IN (1,2) 
) as new
group by new.product_id
order by count(new.product_id) desc
limit 8

0 个答案:

没有答案