tblJobs
column で検索を実装したいテーブルがありますJobDescription
。私
このテーブルには 70,000 を超える行があります。私はこれをうまく実装しましたが、私が使った方法は遅すぎます。
誰でもこの問題を解決するのを手伝ってもらえますか? 私が使用しているSQLストアドプロシージャは次のとおりです。
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
ここの関数には、使用される関数があります。そのテーブル値関数のコードは次のとおりです。
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
。