首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

上面查询该怎么优化

2012-11-06 
下面查询该如何优化?SQL codeSELECT @avg_money (SELECT SUM(金额)/ (DATEDIFF(m, MIN(时间), MAX(时间)

下面查询该如何优化?

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.用户编号 = @iORDER 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.表中主键和索引是否有缺失

热点排行