2009-04-09 120 views
0

插入我有两个表,看起来像这样:有效的一种一对多的C#和MSSQL

News: (ID, Title, TagID) 
Tags: (ID, Tag) 

每个消息只能有一个标签。处理插入新闻表的最有效方法是什么?标签表具有50 000行。

我只做了大约一半的插入。 300条新闻,每小时约2次。我认为我需要一些内存中的标签缓存?

如果标签不在标签表中,我需要插入它并将TagID设置为新插入的标识。

希望你能明白!

回答

0

我每条新闻相信你会得到一个字符串列表属于所谓的“标签”。从你提供的结构来看,每个新闻项目只能有一个标签?这看起来很不寻常,但无论如何,下面都适用。

如果您的标签表上有一个索引,搜索将会非常快,并且数据库将负责缓存,所以不要担心缓存。当你在正确的位置有索引时,你会惊讶地发现数据库可以加速多少东西

从Tag = whatever1(对每个标签都这样做)中进行选择,每次如果没有返回行插入它,否则使用你发现的id来做到这一点。在每个INSERT上运行proc。

+0

谢谢,我测试过这个,它的效果很好。 – alexn 2009-04-17 06:51:24

1

您在后台使用的SQL Server版本是什么?

如果您使用的是SQL Server 2008,我会建议将每天的标签和新闻批量加载到临时工作表中,然后使用MERGE语句从这些工作表中更新实际的标签和新闻表。我会为此使用C#“SqlBulkCopy”类。

MERGE允许您轻松地只插入那些已更改的项目,并且可能会将那些已存在的项目全部更新到一个简单的SQL语句中。

如果您使用的是SQL Server 2005或更低版本,则基本上可以做同样的事情,但是您必须编写一些代码(C#或T-SQL)来手动检查需要从临时bulkload中插入的内容表格和已经存在的内容。

马克