哪个是更快的字符串搜索或正则表达式搜索?

时间:2014-06-18 14:32:33

标签: c# regex string

我收到了一个SQL文件,其中有多个存储过程。对于给定的表名,我必须找到一个使用该表的过程名称。这可以通过使用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

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

1 个答案:

答案 0 :(得分:4)

哪一个更有效率真的重要吗?任何差异都将是微秒级。你更大的问题就是找出一种有效的方法。如果结果太慢,那么找出一种让它更快的方法。在您采用工作方法之前,您对效率的关注是过早优化的典型案例。

虽然你可以可能想出一个能做你想做的正则表达式,但除非你非常精通正则表达式,否则这样做会非常困难。另一方面,使用string.Split非常容易实现,您可以在几分钟内获得工作代码。它可能会非常快到你的目的。

帮自己一个忙:选择简单的解决方案并继续前进。为真正重要的事情保存优化工作。