这是更快的字符串搜索或正则表达式搜索
本文关键字:搜索 正则表达式 字符串 | 更新日期: 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
非常容易实现,您可以在几分钟内获得工作代码。对于你的目的来说,它可能已经足够快了。
帮你自己一个忙:选择简单的解决方案,然后继续前进。