如何提高GROUP BY分组查询效率
最近工作中遇到一个性能问题,自己搞了好久还是没搞定,拿到论坛上来,希望各位大虾给点意见。
查询的SQL如下:
SELECT A,B,C,D,COUNT(1) FROM T WHERE C=@C AND D IN (@D) GROUP BY A,B
因为数据量比较大,所以这条SQL效率就变得特别慢,而且这个是用在页面查询上的,分页后每次查询都要花到8到9秒钟,页面卡死在那边,希望高手们帮小弟解答,小弟这边先谢过了。
------解决方案-------------------- 引用: Quote: 引用:
建索引,然后尽可能的过滤掉不符合条件的数据,然后再分组
下面是实际用到的SQL,请帮我看一下,索引什么的已经加过了,没多大效果
SELECT
DEALER_ID,
DEALER_BUSCODE,
DEALER_NAME,
DEALER_STATUS,
OFFER_ID,
OFFER_NAME,
CHANNEL_ID,
SUB_CHANNEL_ID,
DISTY_ID,
DISTY_BUSCODE,
DISTY_NAME,
REGION_CODE,
REGION_NAME,
O_ACTIVATION_TIME,
P_ACTIVATION_TIME,
ACTIVATION_DATE,
STATE_CODE,
STATE_NAME,
PACKAGE_ID,
PACKAGE_NAME,
SALES_PIC,
MSISDN,
COUNT(1)
FROM UM2_ACTI_DTL_201305
WHERE OFFER_TYPE IN(1,3)
AND ACTIVATION_TYPE = 3
AND OFFER_ID IN(20000001,20000031,20010010)
AND PACKAGE_ID IN(322,197,326,566,318,576,277,374,377,581)
AND CHANNEL_ID IN(1,2,4)
GROUP BY DEALER_ID,PACKAGE_ID,ACTIVATION_DATE
你这样的sql不能执行吧。 除了group by的列 ,其它选择的列必须要有统计函数的吧,类似于sum,average之类的
------解决方案-------------------- 引用: Quote: 引用:
Quote: 引用:
针对此SQL语句,可在C、D字段建索引,A、B建组合索引
这个我已经试过了,加索引效果甚微,查询效果还是一样的慢。
贴上SQLSELECT
DEALER_ID,
DEALER_BUSCODE,
DEALER_NAME,
DEALER_STATUS,
OFFER_ID,