【问题标题】:Effective one-to-many inserts in C# and MsSql在 C# 和 MsSql 中有效的一对多插入
【发布时间】:2009-04-09 07:15:29
【问题描述】:

我有两张表,如下所示:

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

每条新闻只能有一个标签。处理对新闻表的插入最有效的方法是什么? Tags 表有大约 50 000 行。

我只做大约的批量插入。一次 300 条新闻,大约每小时 2 次。我假设我需要一些用于标签的内存缓存?

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

希望你能明白!

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

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

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

    MERGE 允许您轻松地仅插入已更改的项目,并可能更新已存在的项目,所有这些都在一个方便的 SQL 语句中。

    如果您使用的是 SQL Server 2005 或更低版本,您可以执行基本相同的操作,但您必须编写一些代码(C# 或 T-SQL)来手动检查需要从临时批量加载表中插入的内容,以及已经存在的内容。

    马克

    【讨论】:

      【解决方案2】:

      我认为对于每个新闻项目,您都会得到一个字符串列表,这些字符串是所谓的“标签”。从您给出的结构来看,每个新闻项只能有一个标签?这似乎不寻常,但以下内容仍然适用。

      如果您的 Tags 表上有索引,则搜索速度会非常快,并且无论如何数据库都会处理缓存,因此不必担心缓存。当您在正确的位置建立索引时,您会惊讶于数据库可以加快速度

      从标签中选择其中标签 = 不管1(为每个标签执行此操作),每次如果没有返回行就插入它,否则使用您找到的 id 来执行此操作。在每个 INSERT 上运行 proc。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        相关资源
        最近更新 更多