C# 是否有更好的搜索方法代替使用asp.net的string.Contains(“关键字”)搜索?

C# 是否有更好的搜索方法代替使用asp.net的string.Contains(“关键字”)搜索?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,例如,我们应用程序的用户希望通过输入productName关键字来搜索产品 sql server数据库的Products表包含大约1000万条记录 使用asp.net C#是否可以实现比productName.Contains(“关键字”)更好、性能更高的搜索方法 我现在正在使用存储过程,但linq到sql或实体框架也是一种可能。您可以使用类似的 差不多 DECLARE @Table TABLE( Val VARCHAR(50) ) INSERT INTO @Table SE

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

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

使用asp.net C#是否可以实现比productName.Contains(“关键字”)更好、性能更高的搜索方法


我现在正在使用存储过程,但linq到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 + '%'

如果你想要更好的表现,那么你可以考虑一个更好的方法。请注意,LINQ to SQL目前不支持这一点,但您可以将SQL写入存储过程,并从应用程序中调用存储过程。接受的答案建议阅读。

从数据库中获取的数据不应超过所需数量。因此,最好将行限制在数据层(即存储过程)内。您可以通过仅返回匹配的行来执行此操作:

SELECT * FROM Products WHERE ProductName LIKE '%' + @keyword + '%'
其中@keyword是存储过程的参数

但是请注意,使用LIKE的性能可能会很慢,因为它必须读取整个表。通过匹配以关键字开头的产品,可以更好地提高性能:

SELECT * FROM Products WHERE ProductName LIKE @keyword + '%'
注意:我删除了@关键字之前的“%”。这使SQL Server能够使用ProductName列上的索引更快地查找行


为了获得进一步的帮助,请发布您的存储过程…

可能有些过分,但请检查,我相信这就是stack overflow用于搜索的内容

您使用什么技术访问数据库?我现在使用存储过程,但LINQtoSQL或实体框架也将被允许使用。有没有比“Like”sql更好、性能更高的搜索方法?