使用LIKE运算符

时间:2016-01-25 09:51:38

标签: c# sql-server

SQL表有20835行。需要在C#代码的foreach循环中搜索此表(仅返回列)。这个Foreach循环执行了大约35,000次。

所以,我在表中创建了一个Index(由两列组成),用于快速搜索返回Index列本身。在C#代码的SqlDataReader的帮助下使用此索引...

但是,它太慢了......永远需要完成这个动作。

所以,做了一个字典。在这里,我们使用TryGetValue()来获取关键值......

所以就像搜索KEY='value'

的字典一样

[TryGetValue()是快速搜索...]

但是如果我们需要在KEY开头/包含搜索???

的情况下怎么办?

有什么办法吗?

一种方法是:

var values = dictionary.Where(pv => 
             pv.Key.StartsWith("A").Select(pv => pv.Value);

但是,这是一个缓慢的搜索过程...

还有其他方法吗?我需要进行搜索,搜索必须快速...

1 个答案:

答案 0 :(得分:2)

根据您的评论,您想要执行" StartsWith"搜索PIngredientName。

为此,您需要此列的索引和

之类的查询
SELECT SourceIngredientName WHERE PIngredientName LIKE @SearchString + '%';

〜21.000行不是那么多,并且索引列上的LIKE 'Pattern%'查询的效果非常好。这应该是闪电般快......

我将查询打包成可插入的TVF,如:

CREATE FUNCTION dbo.SearchIngredient(@StartWith VARCHAR(100))
RETURNS TABLE
AS
RETURN SELECT SourceIngredientName, OtherColumns WHERE PIngredientName LIKE @StartWith + '%';
GO

而不是称之为

SELECT * FROM dbo.SearchIngredient('test');