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);
但是,这是一个缓慢的搜索过程...
还有其他方法吗?我需要进行搜索,搜索必须快速...
答案 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');