码迷,mamicode.com
首页 > 其他好文 > 详细

奇妙的并行问题

时间:2015-11-27 19:34:22      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

人名模糊查找,是一个非常寻常的功能。然而用起来发现了一个问题

比方说我有一个人员Table 数据量大概300W。人名那列有索引--这个是背景故事

然后看下以下这两句,是不是并没有什么卵区别

DECLARE @Name NVARCHAR(50)=黄小A

SELECT  *
    FROM dbo.tb_persons
        WHERE pess_fullname LIKE %+@Name+%

SELECT  *
    FROM dbo.tb_persons
        WHERE pess_fullname LIKE %黄小A%

是的!在平时执行的时候,确实没有区别,在300W的数据里面直接秒出结果。然而在存储过程里面就不一样了~

CREATE PROC Tmp_Proc
(
    @Name NVARCHAR(50)
)
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT  pess_id,pess_fullname
    FROM dbo.tb_persons
        WHERE pess_fullname LIKE %+@Name+%
GO


CREATE PROC Tmp_Proc2
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT  pess_id,pess_fullname
    FROM dbo.tb_persons
        WHERE pess_fullname LIKE %黄小变%
GO

执行起来是不是一样?? NO !

上图,存储过程1执行了接近5S,存储过程2确实正常的50毫秒,怎么会这样呢?

技术分享

 

然后我开启了Profile ,终于发现问题,存储过程1里面Parallel里面的并行全部是0,没有启用并行

技术分享

存储过程2就还是简单明了,并行运行。╮(╯_╰)╭原来还有这一套

技术分享

 

 

要解决这个问题。可以在存储过程里面使用动态语句进行拼接,就可以还是使用并行了yeah~

 

奇妙的并行问题

标签:

原文地址:http://www.cnblogs.com/Gin-23333/p/5001421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!