首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用sql搜索关键字的最佳实践

使用sql搜索关键字的最佳实践
EN

Stack Overflow用户
提问于 2009-08-19 12:25:14
回答 2查看 760关注 0票数 0

我有三张桌子

代码语言:javascript
运行
复制
[USER] --Master user table 
[KEYWORD] --Master keyword table  
[USER_KEYWORD] --[USER]-[KEYWORD] mapping table 

下面是我数据库中的结构

代码语言:javascript
运行
复制
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

我有一个名为TEST_SEARCH_KEYWORDS的sp,它根据从outside.Currently提供的关键字搜索记录,我在sp中使用的是相似的条件。我想知道,这会很好的从数据库中搜索记录,像将来一样使用,我的记录会不断增加.I,不想使用全文搜索,因为我也必须处理server 2000。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-19 12:29:24

一种(存储饥渴)解决方案是预先计算并在实际关键字本身旁边存储一个number关键字prefice。然后,根据外观标准,您将对相关的前缀列(如果存在的话)进行直接的相等比较,或者返回到执行“类似”比较。

例如,假设限制搜索单词必须至少包含3个字符。您可以创建列Prefix3Chars、Prefix4Chars、Prefix5Chars。假设用户输入搜索词"Hello“,而您的数据库中包含一个关键字"Hello,World”。您将选择在Prefix5Chars列上搜索,并将匹配关键字"Hello,World“。如果用户使用关键字"Hello,W“执行搜索,您将返回到使用"like”进行搜索。

票数 0
EN

Stack Overflow用户

发布于 2009-08-19 12:37:29

如果你继续搜索,就像:

代码语言:javascript
运行
复制
WHERE K.[KEYWORD] LIKE (@SEARCHKEYWORD+ '%')

然后,您的查询将使用一个索引,并且随着表的增长,它的性能仍然会很好。但是,如果将其更改为:

代码语言:javascript
运行
复制
WHERE K.[KEYWORD] LIKE ('%'+ @SEARCHKEYWORD+ '%')

然后,它将不会,它将扫描表,这将导致不良的性能,因为您的表增长。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1299591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档