2009-08-19 69 views
0

检索词我有三个表关于与SQL

[USER] --Master user table 
[KEYWORD] --Master keyword table 
[USER_KEYWORD] --[USER]-[KEYWORD] mapping table 

以下最佳做法是在我的数据库结构

GO 
--master user table 
CREATE TABLE [USER] 
(
    [USERID] INT IDENTITY, 
    [NAME] VARCHAR(50) 
) 
GO 

--master keyword table 
CREATE TABLE [KEYWORD] 
(
    [KEYWORDID] INT IDENTITY, 
    [KEYWORD] VARCHAR(50) 
) 

GO 
--x table user_keyword 
CREATE TABLE [USER_KEYWORD] 
(
    [USERID] INT , 
    [KEYWORDID] INT 
) 

GO 
--Insert data in master user table 
INSERT INTO [USER] 
SELECT 'TESTUSER1' 
UNION ALL 
SELECT 'TESTUSER2' 
UNION ALL 
SELECT 'TESTUSER3' 
UNION ALL 
SELECT 'TESTUSER4' 

GO 
--Insert data in master keyword table 
INSERT INTO [KEYWORD] 
SELECT 'ASP' 
UNION ALL 
SELECT 'ASP.NET 3.5' 
UNION ALL 
SELECT 'C#' 
UNION ALL 
SELECT 'JAVA' 
UNION ALL 
SELECT 'ASP.NET' 
UNION ALL 
SELECT 'SQL' 
UNION ALL 
SELECT 'SQL SERVER' 
UNION ALL 
SELECT 'SQL SERVER 2005' 
UNION ALL 
SELECT 'SQL SERVER 2008' 

GO 

--Insert data in user keyword table 

INSERT INTO [USER_KEYWORD] 
SELECT 1,1 
UNION ALL 
SELECT 2,2 
UNION ALL 
SELECT 3,3 
UNION ALL 
SELECT 4,4 
UNION ALL 
SELECT 1,2 
UNION ALL 
SELECT 2,3 
UNION ALL 
SELECT 3,4 
UNION ALL 
SELECT 4,1 
UNION ALL 
SELECT 2,3 
UNION ALL 
SELECT 3,4 
UNION ALL 
SELECT 4,6 
UNION ALL 
SELECT 3,6 
UNION ALL 
SELECT 4,6 
UNION ALL 
SELECT 2,7 
UNION ALL 
SELECT 3,8 
UNION ALL 
SELECT 4,9 

GO 


CREATE PROC TEST_SEARCH_KEYWORDS 
@SEARCHKEYWORD VARCHAR(50) 
AS 
BEGIN 

    SELECT K.[KEYWORD],COUNT(UK.[KEYWORDID]) AS [KEWWORDCOUNT] FROM [KEYWORD] K 
    INNER JOIN [USER_KEYWORD] UK 
    ON K.[KEYWORDID]=UK.[KEYWORDID] 
    WHERE K.[KEYWORD] LIKE (@SEARCHKEYWORD+ '%') 
    GROUP BY K.[KEYWORD] 

END 


--TEST EXAMPLES 

EXEC TEST_SEARCH_KEYWORDS 'ASP' 
--0UTPUT 
KEYWORD           KEWWORDCOUNT 
-------------------------------------------------- ------------ 
ASP            2 
ASP.NET 3.5          2 


--TEST EXAMPLES 

EXEC TEST_SEARCH_KEYWORDS 'SQL' 
--0UTPUT 
KEYWORD           KEWWORDCOUNT 
-------------------------------------------------- ------------ 
SQL            3 
SQL SERVER           1 
SQL SERVER 2005         1 
SQL SERVER 2008         1 

我有一个SP命名TEST_SEARCH_KEYWORDS基于关键字来搜索记录中是从外面提供的。目前我正在使用像条件中的s​​p。我想知道,这将是很好的从数据库使用像搜索记录,因为在将来我的记录将继续增加。我不想使用全文搜索 因为我必须应付sql server 2000也。

回答

0

其中一个(需要存储的)解决方案是预先计算并存储与实际关键字本身一起的数字关键字。然后基于外观标准,您可以在相关的前缀列(如果存在)上进行直接的平等比较,或者返回执行“类似”比较。

例如,假设强制搜索词必须包含至少3个字符的限制。您可以创建列Prefix3Chars,Prefix4Chars,Prefix5Chars。假设用户输入搜索词“你好”,并且你的数据库包含关键词“你好,世界”。您将选择在Prefix5Chars列上进行搜索并匹配关键词“Hello,World”。如果用户使用关键词“你好,W”执行搜索,则会回退到使用“like”进行搜索。

1

,如果你继续搜索,如:

WHERE K.[KEYWORD] LIKE (@SEARCHKEYWORD+ '%') 

那么你的查询将使用索引,并且应该仍然执行以及表的增长。但是,如果将其更改为:

WHERE K.[KEYWORD] LIKE ('%'+ @SEARCHKEYWORD+ '%') 

那么就不会,它会为你的表的增长表扫描,这会导致糟糕的表现。