我有两张表,如下所示:
News: (ID, Title, TagID)
Tags: (ID, Tag)
每条新闻只能有一个标签。处理新闻表插入的最有效方法是什么? Tags表有50 000行。
我只做大约的批量插入。每次300条新闻,每小时约2次。我假设我需要一些内存缓存用于标签?
如果标签不在标签表中,我需要插入标签并将TagID设置为新插入的标识。
希望你能得到这个想法!
答案 0 :(得分:1)
您在后台使用的是哪个版本的SQL Server?
如果您使用的是SQL Server 2008,我建议将每天的标记和新闻批量加载到临时工作表中,然后使用MERGE语句从这些工作表中更新实际的标记和新闻表。我会使用C#“SqlBulkCopy”类。
MERGE允许您只在一个方便的SQL语句中轻松插入已更改的项目,并可能更新已存在的项目。
如果您使用的是SQL Server 2005或更低版本,您可以基本相同,但您必须编写一些代码(C#或T-SQL)来手动检查需要从临时bulkload表中插入的内容,以及已经存在的东西。
马克
答案 1 :(得分:0)
我假设每个新闻项目都会得到一个字符串列表,这些字符串是所谓的“标签”。根据您给出的结构,每个新闻项只能有一个标签?这看似不寻常,但无论如何都适用于此。
如果您的Tags表上有索引,搜索速度非常快,数据库无论如何都会处理缓存,所以不要担心缓存。当你在正确的地方有索引时,你会惊讶于数据库可以加快多少速度
从标签中选择Tag = whatever1(对每个标签执行此操作),每次如果没有返回的行插入它,否则使用您找到的ID来执行此操作。在每个INSERT上运行proc。