关于group by语句的优化,高手帮忙 ( 积分: 200 )

  • 主题发起人 主题发起人 shbx_sjuser
  • 开始时间 开始时间
S

shbx_sjuser

Unregistered / Unconfirmed
GUEST, unregistred user!
有表list,字段:<br>list1&nbsp;&nbsp;list2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list4&nbsp;&nbsp;&nbsp;&nbsp;list5&nbsp;&nbsp;&nbsp;&nbsp;list6<br>002&nbsp;&nbsp;&nbsp;&nbsp;2006-2-1&nbsp;&nbsp;2006090002&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100.00&nbsp;&nbsp;&nbsp;当月<br>002&nbsp;&nbsp;&nbsp;&nbsp;2006-1-1&nbsp;&nbsp;2006090002&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50.00&nbsp;&nbsp;&nbsp;&nbsp;补付<br>003&nbsp;&nbsp;&nbsp;&nbsp;2006-1-1&nbsp;&nbsp;2006010003&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100.00&nbsp;&nbsp;&nbsp;当月<br>003&nbsp;&nbsp;&nbsp;&nbsp;2006-2-1&nbsp;&nbsp;2006020003&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50.00&nbsp;&nbsp;&nbsp;&nbsp;当月<br>其中list3结算号是年月+编号,表示是哪个月的支付数据,list2是应该支付的时间<br>如果list3中的月份比list2晚的话就是补付纪录<br>现在要在表中select出每个人的按list3的日期的汇总支付纪录<br>select&nbsp;list1,sum(list5)&nbsp;from&nbsp;list&nbsp;where&nbsp;substring(list3,1,6)='200602'&nbsp;and&nbsp;list4<br>='3'&nbsp;group&nbsp;by&nbsp;list1,list3,list4<br>表中40多W条纪录,这个语句执行要30秒以上,表的索引:list3,list1+list3,list2<br>哪为高手能帮忙把这条group&nbsp;by语句优化到查询执行时间缩短到最短。
 
感觉这里花的时间很多,substring(list3,1,6)='200602'&nbsp;,如果可以把字段优化一下,可能更好。
 
不要用SUBSTRING,用了函气索引就没有用了改&nbsp;list&gt;='2006020001'&nbsp;and&nbsp;list&lt;='2006029999'
 
substring(list3,1,6)='200602'&nbsp;<br>换成list3&nbsp;like&nbsp;'200602%'
 
后退
顶部