【发布时间】:2009-06-30 03:17:09
【问题描述】:
我有一个将数据插入 3 个表的存储过程(使用 UPSERTS),并且有一些基本的逻辑。 (如果-那么-否则)
我需要使用不同的参数执行这个 Sproc 数百万次(来自 C# 应用程序),并且我需要它是 FAST。
最好的方法是什么?
有人知道除了 Lucene 或 Sql Server FTS 之外的开源(或不)现成文档索引器吗?
*我正在尝试建立一个文档单词索引。对于文档中的每个单词,我将单词、docID 和单词位置插入到数据库中。
例如,对于 100 个文档,这种情况会发生 100000 次。
Sproc:有 3 个表要插入,每一个我都会做一个 UPSERT。
C# 应用程序:
using (SqlConnection con = new SqlConnection(_connectionString))
{
con.Open();
SqlTransaction trans = con.BeginTransaction();
SqlCommand command = new SqlCommand("add_word", con, trans);
command.CommandType = System.Data.CommandType.StoredProcedure;
string[] TextArray;
for (int i = 0; i < Document.NumberOfFields; i++)
{
...
Addword(..., command); <---- this updates parameters with new values and ExecuteNonQuery.
}
}
我忘了提,这段代码会在 Sql Server 中产生死锁。我不知道为什么会这样。
【问题讨论】:
-
你现在的执行方式是不是很慢?
-
它实际上是做什么的?是否可以将多个 UPSERTS 表示为一个 upsert(例如,不是将 1 项的计数增加 5 次,而是更新一次以将其计数增加 5。
-
我正在建立一个文档词索引。所以我要添加一个词,它是文档和该文档中的位置。当我有数百个文档时,它有数十万个单词,而且速度很慢......
-
SUYC(向我们展示您的代码)
-
您是否考虑过使用内置的全文索引功能?或者甚至寻找第三方选项来做到这一点?
标签: c# sql-server sql-server-2005 stored-procedures