这是更快的字符串搜索或正则表达式搜索

本文关键字:搜索 正则表达式 字符串 | 更新日期: 2023-09-27 18:09:05

我得到了一个SQL文件,其中有多个存储过程。对于给定的表名,我必须找到使用该表的Procedure名。这可以通过使用split()方法和字符串搜索来实现。如果我使用正则表达式搜索,提取过程名会更有效吗?

搜索将在一个以GB为单位的目录中的多个文件中进行。例如:我有一个SQL文件,其中有两个存储进程,我需要搜索一个进程名称,其中使用表ucg2.userCompanyId

USE [BI]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersAM_prc]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ActiveUsersAM_prc]
GO
CREATE PROCEDURE  [dbo].[ActiveUsersAM_prc]    
--ActiveUsers_getdata_prc    
    @Usercompanyid varchar(max)    
AS     
Begin    

IF OBJECT_ID('tempdb..#ActiveUserCompany') IS NOT NULL  
DROP TABLE #ActiveUserCompany  
CREATE TABLE #ActiveUserCompany  
(userCompanyId INT)  
INSERT INTO #ActiveUserCompany  
SELECT val FROM dbautil.dbo.Split_fn(@userCompanyID,',')  

CREATE CLUSTERED INDEX ix_usercompanyId ON #ActiveUserCompany(userCompanyId)  
SELECT * FROM dbo.ActiveUsersAMCache_tbl (nolock)
WHERE userCompanyId IN (SELECT userCompanyId FROM #ActiveUserCompany (nolock))
END  
USE [BI]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersRelatedCompanies_prc]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]
GO
CREATE PROCEDURE  [dbo].[ActiveUsersRelatedCompanies_prc]  
    @Usercompanyid INT
AS     
Begin  
select * 
FROM dbo.ActiveUsersRelatedCompanies_tbl (NOLOCK)
WHERE userCompanyId in (
        select  ucg2.userCompanyId
        from    userCompanyGrouping_tbl u
                inner join userCompanyGrouping_tbl ucg2
                    on isNull(u.subParentCompanyId,u.parentCompanyId) = 
                        (case when u.subParentCompanyId is not null then ucg2.subParentCompanyId 
                            else ucg2.parentCompanyId end)
        where   u.userCompanyId = @userCompanyID
)       
order by userCompanyName, userGroup, fullName
END

在它如何使用正则表达式搜索提取过程名称为一个给定的表名,它会比字符串搜索快?

这是更快的字符串搜索或正则表达式搜索

哪个更有效率真的重要吗?任何差别都在微秒量级。你更大的问题是找到一个可行的方法。如果结果是太慢了,那就想办法让它更快。在你有一个工作方法之前,你对效率的关注是一个过早优化的典型例子。

虽然你可以可能想出一个正则表达式,将做你想要的,这样做将是非常困难的,除非你非常精通正则表达式。另一方面,使用string.Split非常容易实现,您可以在几分钟内获得工作代码。对于你的目的来说,它可能已经足够快了。

帮你自己一个忙:选择简单的解决方案,然后继续前进。