我有一个如下所示的查询,它工作正常,但没有优化,因为运行需要1.5秒。如何使其达到优化结果?
select h.keyword_id,
( select count(DISTINCT(user_id)) from history where category_id = 6
and h.keyword_id=keyword_id group by keyword_id ) as cat_6,
( select count(DISTINCT(user_id)) from history where category_id = 7
and h.keyword_id = keyword_id group by keyword_id ) as cat_7
from
history h group by h.keyword_id
历史记录表
his_id keyword_id category_id user_id
1 1 6 12
2 1 6 12
3 1 7 12
4 1 7 12
5 2 6 13
6 2 6 13
7 2 7 13
8 3 6 13
结果:
keyword_id cat_6 cat_7
1 2 2 (unique users)
2 2 1
3 1 0
答案 0 :(得分:0)
您可以像这样重写您的查询:
select h.keyword_id,
count(distinct if(category_id = 6, user_id, null)) as cat_6,
count(distinct if(category_id = 7, user_id, null)) as cat_7
from
history h
group by h.keyword_id
基于样本数据的理想结果是错误的。在每个keyword_id中,始终只有一个不同的user_id。
要进行更多优化,您必须发布show create table history
的结果和explain <your_query>;
的输出