奇妙的并行问题
2016-05-05 17:22
288 查看
人名模糊查找,是一个非常寻常的功能。然而用起来发现了一个问题
比方说我有一个人员Table 数据量大概300W。人名那列有索引--这个是背景故事
然后看下以下这两句,是不是并没有什么卵区别
是的!在平时执行的时候,确实没有区别,在300W的数据里面直接秒出结果。然而在存储过程里面就不一样了~
执行起来是不是一样?? NO !
上图,存储过程1执行了接近5S,存储过程2确实正常的50毫秒,怎么会这样呢?
然后我开启了Profile ,终于发现问题,存储过程1里面Parallel里面的并行全部是0,没有启用并行
存储过程2就还是简单明了,并行运行。╮(╯_╰)╭原来还有这一套
要解决这个问题。可以在存储过程里面使用动态语句进行拼接,就可以还是使用并行了yeah~
比方说我有一个人员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~
相关文章推荐
- 空间索引应用
- Merge 的小技巧
- 几何空间类型初探
- 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD
- Rollback 语句 在08R2版本
- SqlServer链接MySql操作步骤
- 作死的玩一下计算列
- 从0开始学复制~我的复制学习历程 (一) 简单的快照复制处理
- 使用For XML PATH 会影响Cross Apply 返回
- 一个update的小故事
- 行大小计算测试
- Sql Server 2008R2 遇到了BCP导入各种中文乱码的问题
- 简析一下SQL Server里面Fast_Forword 和 SRROLL 的区别
- Filestream 使用简单步骤
- 将一列包含多个ID拆分多行
- Sql Server 添加外部程序集基本操作
- 使用scrapy的定制爬虫-第三章-爬虫的javascript支持
- IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
- RestFul简介以及在springmvc中的应用
- 页面渲染——简化paint复杂程度和区域