sql查询性能低下

    With ZBS AS(
        select  zb.ZUser_RefererUrl as RefererUrl,zb.ZUser_Id as ID, zb.ZUser_Key as UserKey,zb.ZUser_SousuoKeyword as SousuoKeyword,zb.ZUser_BMobile as BMobile,zb.ZUser_Mobile as Mobile, zb.ZUser_Email as Email,zb.ZUser_Int1 as QQ,zb.ZUser_Str1 as UserPUK,zb.ZUser_Nickname as Nickname,zb.ZUser_StayTotalSecs as StayTotalSecs,ZUser_AddTime as AddTime 
        from ZbsUserInfo as zb     
        where  ZUser_AddTime between '2015/10/14 0:00:00' 
        and '2015/10/15 23:59:59' 
        and zb.ZUser_StayTotalSecs>=-1  
        and zb.Sp_Id in ( 1,2,3,4,5,6,7,8,9,-1) 
        and zb.ZUser_Int1 >0  
    ) 
    select * from 
    (
        select ROW_NUMBER() OVER (ORDER BY  AddTime   desc ) as ZS,Count(*) over() as Total,* 
        from ZBS 
        where ID in (select min(ID) 
        from  ZBS  
        group by UserKey  having count(UserKey )>=1 )  
    )
    as T where ZS between 1 and 30

 

ZbsUserInfo 这个表的数据量有几十万..然后放在数据库查询的时候需要几十秒.
.单表查询性能都这么地下.欲哭无泪..导致web服务器都奔溃.搜了sql性能化相关资料发现大多都是尽量使用索引查询不要使sql语句导致全表查询.本人才疏学浅.特此来寻求优化解决方法.或者其他解决方法.
largeQ
浏览 496回答 7
7回答

明月笑刀无情

    1. in语句影响性能,换成别的试试.  2. 尽量避免在where子句中对字段进行函数操作,否则将导致全表扫描。 3. 建议你分段执行看看到底哪一段代码耗时多. 例如With 那一块执行一次. 然后Select 那一段执行一次. 看看具体耗时比较长的是在哪一段. 然后再慢慢排查是因为哪个where条件导致时间变长.    

万千封印

1、建索引原则,一般根据所查询的条件或关联的条件来建,如ZbsUserInfo: ZUser_AddTime,ZUser_StayTotalSecs,Sp_Id,ZUser_Int1 这些列 可能会是这样子的 CREATE NONCLUSTERED INDEX [索引名] ON [dbo].[ZbsUserInfo] (ZUser_AddTime, ZUser_StayTotalSecs, Sp_Id, ZUser_Int1)INCLUDE ( ZUser_RefererUrl,ZUser_Id, ZUser_Key,ZUser_SousuoKeyword,ZUser_BMobile,ZUser_Mobile, ........ ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]GO 这种手动建索引。 2、如果你使用的是MsSql2008及以上的版本就更好办了MSSMS提供了一个方案自动提示你要建什么索引非常方便 查询->包括实际的执行计划,点击一下就执行你人慢SQL语句吧 下面为:结果、消息、执行计划 答案就是执行计划中会显示为“缺少索引(...”右键-》缺少索引详细信息

吃鸡游戏

这个之前创建了.采用的你说的第二种方法创建的.

慕容3067478

试试用SQL Server profile看看具体哪里是性能瓶颈,然后再优化

森栏

我表中2,30个字段..这里读取不是所有列,其中一部分

慕的地10843

in我正按照2楼所说的试一试...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server