열에 검색을 구현하려는 테이블 tblJobs
이 있습니다. Ivarchar 유형의 열에서 검색을 구현하는 방법
이 테이블에는 70,000 개가 넘는 행이 있습니다. 성공적으로 구현했지만 사용 방법이 너무 느립니다.
누구든지이 문제를 해결할 수 있습니까? 사용하는 기능이 여기에 기능에
Create Procedure Sp_SearchJobs
(
@SearchValue varchar(Max)
)
AS
BEGIN
WITH SplitTblJobs AS
(
SELECT tbljobs.*, s.ListValue FROM tbljobs tbljobs
CROSS APPLY dbo.FN_ListToTable(' ',tbljobs.JobDescription) AS s
)
, WordMatchCount AS
(
SELECT s.JobID,COUNT(*) AS CountOfWordMatch FROM dbo.FN_ListToTable('',@SearchValue) v
INNER JOIN SplitTblJobs s ON v.ListValue=s.ListValue
GROUP BY s.JobID
HAVING COUNT(*)>0
)
, SearchLen AS
(
SELECT n.Number,SUBSTRING(@SearchValue,1,n.Number) AS PartialSearchValue
FROM Numbers n WHERE n.Number<=LEN(@SearchValue)
)
, MatchLen AS
(
SELECT tbljobs.JobID,MAX(l.Number) MatchStartLen FROM tbljobs tbljobs
LEFT OUTER JOIN SearchLen l ON LEFT(tbljobs.JobDescription,l.Number)=l.PartialSearchValue
GROUP BY tbljobs.JobID
)
SELECT tbljobs.*,w.CountOfWordMatch,m.MatchStartLen FROM tbljobs tbljobs
LEFT OUTER JOIN WordMatchCount w ON tbljobs.JobID=w.JobID
LEFT OUTER JOIN MatchLen m ON tbljobs.JobID=m.JobID
WHERE w.CountOfWordMatch>0
ORDER BY w.CountOfWordMatch DESC,m.MatchStartLen DESC,LEN(tbljobs.JobDescription)
DESC,tbljobs.JobDescription ASC
END
: 내가 사용하고있는 SQL 저장 프로 시저이있다. 해당 테이블 반환 함수의 코드는 다음과 같습니다.
Create FUNCTION [dbo].[FN_ListToTable]
(
@SplitOn char(1)
,@List varchar(8000)
)
RETURNS TABLE
AS RETURN
(
SELECT
ListValue
FROM (SELECT
LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
FROM (
SELECT @SplitOn + @List + @SplitOn AS List2
) AS dt
INNER JOIN dbo.Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = @SplitOn
) dt2
WHERE ListValue IS NOT NULL AND ListValue!='');
여기에 다른 테이블이 사용됩니다.
CREATE TABLE [dbo].[Numbers]
(
[Number] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Numbers] PRIMARY KEY CLUSTERED
(
[Number] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
) ON [PRIMARY]
GO
이 절차를 실행하려면 ..
- 테이블 만들기 다음과 같이 그 구조이다.
나는 tbljobs
의 decscription 컬럼에 대한 검색을 구현하려는.
전체 텍스트 검색이 활성화되어 있지 않습니다 ... 회색으로 표시됩니다. Microsoft SQL Server 2008 R2 (RTM)를 사용 중입니다. Windows NT 5.2에서 Microsoft Corporation Express Edition (빌드 3790 : 서비스 팩 2) (하이퍼 바이저) –
Agyapal