读书人

这段存储过程需要如何优化才行现在的

发布时间: 2012-04-16 16:20:04 作者: rapoo

这段存储过程需要怎么优化才行,现在的执行速度有点慢,在数据库都已经需要1秒了
现在的这个存储过程有点慢,在数据库的查询时间就已经在1秒左右
前台我需要逻辑判断,所以这是不行的!看看能够怎么优化吧!

SQL code
/****** Object:  StoredProcedure [dbo].[Query_SerchResultList]    Script Date: 03/31/2012 15:22:52 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[Query_SerchResultList](    @type          INT,    --1微博/2用户/3微群    @serchtag      VARCHAR(20),    --搜索关键词    @pageindex     INT,    --页码    @pagesize      INT,    --数据大小    @isCount       INT --是否需要得到行数)AS    DECLARE @sqlstr NVARCHAR(4000)    DECLARE @taghave INT        IF @isCount = 0    BEGIN        --搜索微博        IF @type = 1        BEGIN            SET @sqlstr =                 'SELECT *            FROM   (                       SELECT mb.ApplicationID,                              mb.BlogContent,                              mb.BlogUntreatedContent,                              mb.BlogSender,                              mb.BlogForward,                              mb.BlogFrom,                              mb.IsFirstPub,                              mb.BlogTime,                              mb.IsDeleted,                              mb.CommentCount,                              mb.ForwardCount,                              mb.OriginalBlogID,                              gi.GName,                              gi.GId,                              ROW_NUMBER() OVER(ORDER BY BlogTime DESC) AS Num                       FROM   MicroBlog mb                              LEFT OUTER JOIN GroupInfo gi                                   ON  gi.GId = mb.GroupID                       WHERE  mb.IsDeleted = 0                              AND mb.BlogContent LIKE ''' + '%' + @serchtag +                '%' +                '''                    )t1            WHERE  t1.Num BETWEEN (' + CAST(@PageSize AS VARCHAR) + ' * (' +                CAST(@PageIndex AS VARCHAR) + ' -1)) AND (' + CAST(@PageSize AS VARCHAR)                 + ' * ' + CAST(@PageIndex AS VARCHAR) +                ')             ORDER BY t1.BlogTime DESC';        END                --搜索用户        IF @type = 2        BEGIN            SET @sqlstr = 'SELECT TOP ' + CAST(@pagesize AS VARCHAR) +                '                         a.UserID,a.NickName,a.MyDiscription,a.SelfPicture,a.ConcernedCount,a.ConcerningCount,b.validated                        FROM UserInfo a, SysUser b                         Where a.NickName LIKE + ''' + '%' + @serchtag + '%' +                '''                          AND a.UserID = b.UserID                         AND a.UserID                        NOT IN                          (                            SELECT TOP (' + CAST(@pagesize AS VARCHAR) + ' * ('                 +                CAST(@pageindex AS VARCHAR) +                ' - 1)) a.UserID                              FROM UserInfo a, SysUser b                             Where a.NickName LIKE + ''' + '%' + @serchtag + '%'                 +                '''                             AND a.UserID = b.UserID                            ORDER BY BlogCount desc                         )                        ORDER BY BlogCount desc';        END                --搜索微群        IF @type = 3        BEGIN            SET @sqlstr = 'SELECT TOP ' + CAST(@pagesize AS VARCHAR) +                '                         a.GClassName,b.GId,b.GImage,b.GName,b.GSpeakSize,b.GUserSize,b.GDescription,b.GCreateDate,c.NickName,c.UserID                        FROM GroupClass a,GroupInfo b,UserInfo c                        WHERE a.GClassId = b.GGroupId                        AND b.GUserid = c.UserID                        AND b.GPrivate = 1                        AND b.GName LIKE + ''' + '%' + @serchtag + '%' +                '''                         AND b.GId                        NOT IN                         (                            SELECT TOP (' + CAST(@pagesize AS VARCHAR) + ' * ('                 +                CAST(@pageindex AS VARCHAR) +                ' - 1)) b.GId                            FROM GroupClass a,GroupInfo b,UserInfo c                            WHERE a.GClassId = b.GGroupId                            AND b.GUserid = c.UserID                            AND b.GPrivate = 1                            AND b.GName LIKE + ''' + '%' + @serchtag + '%' +                '''                              ORDER BY b.GScore desc                        )                        ORDER BY  b.GScore desc';        END                EXEC (@sqlstr)        IF @serchtag <> ''        BEGIN            --是否已经存在此次搜索的keyword            SELECT @taghave = COUNT(ID)            FROM   SerchRecord            WHERE  Keyword = CAST(@serchtag AS VARCHAR)                         --如果存在则做更新操作            IF @taghave > 0            BEGIN                UPDATE SerchRecord                SET    SerchTime     = GETDATE(),                       SerchSize     = (SerchSize + 1)                WHERE  Keyword       = @serchtag            END--如果不存在则做新增的操作            ELSE            BEGIN                INSERT INTO SerchRecord                  (                    ID,                    Keyword,                    SerchTime,                    SerchSize                  )                VALUES                  (                    NEWID(),                    @serchtag,                    GETDATE(),                    1                  )            END        END    END        IF @isCount = 1    BEGIN        --搜索微博        IF @type = 1        BEGIN            SET @sqlstr =                 'SELECT COUNT(*)            FROM   MicroBlog     mb            WHERE  mb.IsDeleted = 0 and mb.BlogContent LIKE ''' + '%' + @serchtag                 + '%' + '''';        END                --搜索用户        IF @type = 2        BEGIN            SET @sqlstr =                 '            SELECT COUNT(a.UserID)            FROM   UserInfo     a,                   SysUser      b            WHERE  a.NickName LIKE + ''' + '%' + @serchtag +                 '%                   ' +                '''                    AND a.UserID = b.UserID                        ';        END                --搜索微群        IF @type = 3        BEGIN            SET @sqlstr =                 '                        SELECT COUNT(b.GId)            FROM   GroupClass     a,                   GroupInfo      b,                   UserInfo       c            WHERE  a.GClassId = b.GGroupId                   AND b.GUserid = c.UserID                   AND b.GPrivate = 1                   AND b.GName LIKE + ''' + '%' + @serchtag +                 '%                       ' + '''';        END                EXEC (@sqlstr)    END 



[解决办法]
好长好长。
[解决办法]
技术帖 不要灌水

坐等高人
[解决办法]
我不灌水
[解决办法]

[解决办法]
感觉没有可优化的地方了。看表的数据量了。
[解决办法]
分页啊
[解决办法]
你的动态语句执行部分 用 exec sp_executesql 这种方式执行试一下。这种缓存中保留执行计划,你那种是不保留的,每次都编译重新生成执行计划
[解决办法]
1秒还嫌慢?
[解决办法]
探讨
引用:

1秒还嫌慢?


1秒只是在数据库的时间,我在前台页面很多逻辑判断更需要时间了
我想尽量优化在毫秒级

[解决办法]
探讨

引用:

引用:
引用:

1秒还嫌慢?


1秒只是在数据库的时间,我在前台页面很多逻辑判断更需要时间了
我想尽量优化在毫秒级
一个数据反应就可到秒级,你要求的毫秒级,未必太苛刻了.


额 好吧, 看来还是作罢吧。

读书人网 >SQL Server

热点推荐