2009-04-09 122 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中插入的內容表格和已經存在的內容。

馬克