zoukankan      html  css  js  c++  java
  • 奇妙的并行问题

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

    比方说我有一个人员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~

  • 相关阅读:
    误加all_load引起的程序报错
    ConstraintLayout 约束布局
    前端判断是否APP客户端打开触屏,实现跳转APP原生组件交互之遐想
    TP5 多条件whereOr查询
    json手动解析详解
    Centos python 2.6 升级到 2.7
    js中click重复执行
    使用 Python 实现实用小工具
    使用 Python 编写密码爆破工具
    使用Python进行无线网络攻击
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5001421.html
Copyright © 2011-2022 走看看