我有以下架构
订单(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