2012-07-05 3 views
0

열에 검색을 구현하려는 테이블 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 

이 절차를 실행하려면 ..

  • 만들기 기능
  • 만들기 저장 프로 시저 설명한

    1. 테이블 만들기 다음과 같이 그 구조이다.

    나는 tbljobs의 decscription 컬럼에 대한 검색을 구현하려는.

  • 답변

    1

    SQL Server를 사용한다고 가정하면 전체 텍스트 검색을 사용하고 사용해야합니다.

    http://msdn.microsoft.com/en-us/library/ms142571.aspx

    +0

    전체 텍스트 검색이 활성화되어 있지 않습니다 ... 회색으로 표시됩니다. Microsoft SQL Server 2008 R2 (RTM)를 사용 중입니다. Windows NT 5.2에서 Microsoft Corporation Express Edition (빌드 3790 : 서비스 팩 2) (하이퍼 바이저) – Agyapal

    0

    난 당신이 여기에 바퀴를 재발견하려고 생각 - 당신이 원하는 모든 간단한 문자열 검색이 경우, LIKE 연산자를 사용합니다.

    고급 검색 기능이 필요한 경우 전체 텍스트 검색을 수행하는 방법에 대한 RDBMS 설명서 (SQL 서버 사용)를 확인하십시오.

    +0

    감사합니다. 나는 톰이 전체 텍스트 검색을 통합하려고 노력 중이다 ... 나는 다양한 웹 사이트에서 주어진 모든 단계를 따라 갔지만 아무 것도 나를 도울 수 없다. 전체 텍스트 색인 옵션을 사용할 수 없다 .Pls가 나를 도와 준다 ... 고맙습니다. – Agyapal

    관련 문제