是否有更好的搜索方法而不是string.Contains(“keyword”)使用asp.net?

时间:2010-04-03 06:57:45

标签: c# asp.net sql-server

例如,我们的应用用户希望通过输入productName关键字来搜索产品。

sql server数据库的Products表包含大约1000万条记录。

使用asp.net C#是否有更好,更高性能的搜索方法来实现而不是productName.Contains(“keyword”)?

我现在正在使用存储过程,但linq到sql或实体框架也是可能的。

4 个答案:

答案 0 :(得分:5)

如果您想获得更好的效果,那么您可以查看full text search。请注意,LINQ to SQL目前不支持此功能,但您可以在存储过程中编写SQL并从应用程序中调用存储过程。 this StackOverflow post的已接受答案建议阅读this article

答案 1 :(得分:3)

您可以使用 LIKE

从数据库端实现此目的

LIKE (Transact-SQL)

这样的东西
DECLARE @Table TABLE(
        Val VARCHAR(50)
)

INSERT INTO @Table SELECT 'asdf'
INSERT INTO @Table SELECT 'tada'
INSERT INTO @Table SELECT 'foo'
INSERT INTO @Table SELECT 'bar'
INSERT INTO @Table SELECT 'test'
INSERT INTO @Table SELECT 'test foo'

DECLARE @Lookup VARCHAR(50)
SELECT @Lookup = 'foo'

SELECT  *
FROM    @Table
WHERE   Val LIKE '%' + @Lookup + '%'

答案 2 :(得分:0)

您永远不应该从数据库中获取比您需要的更多数据。因此,最好限制数据层内的行(即存储过程)。您只需返回匹配的行即可完成此操作:

SELECT * FROM Products WHERE ProductName LIKE '%' + @keyword + '%'

其中@keyword是商店流程的参数。

但请注意,使用LIKE的性能可能很慢,因为它必须读取整个表。通过将启动的产品与关键字

相匹配,您可以获得更好的效果
SELECT * FROM Products WHERE ProductName LIKE @keyword + '%'

注意我删除了@keyword之前的'%'。这使SQL Server能够使用ProductName列上的索引更快地找到行!

如需进一步的帮助,请发布您的存储过程...

答案 3 :(得分:0)

可能有点矫枉过正,但请查看lucene.net,我相信这是堆栈溢出用于搜索的内容