日期:2014-05-17  浏览次数:20487 次

下面查询该如何优化?
SQL code
    
SELECT @avg_money = (SELECT SUM(金额)/ (DATEDIFF(m, MIN(时间), MAX(时间)) + 1)               
FROM BuyInformation WHERE 用户编号 = @i)
SELECT TOP 1 u.用户姓名, u.用户地址, buy.时间, @avg_money 月均消费额
FROM UserInfo u join BuyInformation buy ON u.用户编号 = buy.用户编号
WHERE u.用户编号 = @i
ORDER BY buy.时间 DESC


上面这段查询是为了查询用户消费概况. 
可是假设有200个用户的时候,我试了一下查询结果有4S左右! 如果是几十万个用户的话,查询起来不知道要慢到什么地步!不知道该怎么去优化?

------解决方案--------------------
我不知道你为什么要分开两段来写,如果我这查询不是你想要的,那么最好给你你的表结构和你想要的结果,最好少量数据,明天白天没时间,明天晚上要是没人回复你或者没结贴我再看:
SQL code
SELECT TOP 1
         u.用户姓名 ,
         u.用户地址 ,
         buy.时间 ,
         SUM(金额) / ( DATEDIFF(m, MIN(时间), MAX(时间)) + 1 ) 月均消费额
 FROM    UserInfo u
         JOIN BuyInformation buy ON u.用户编号 = buy.用户编号
 WHERE   u.用户编号 = @i
 ORDER BY u.用户姓名 ,
         u.用户地址 ,
         buy.时间 DESC

------解决方案--------------------
改成一个语句即可,至于优化,语句本身没有什么优化空间了
剩下的就是两点
1。join的字段类型 一级where 条件数据类型是否一致
2.表中主键和索引是否有缺失