2016-10-26 58 views
0

我有兩個表PhraseId是兩個主鍵,Modified是自1970年以來的秒數。修改是數據加載的一部分,但不是必需的,除非它使更新更容易。如果我也離不開它,然後我只想用插入或更換使用INSERT OR REPLACE後跟SELECT是否會有任何性能損失?

PhraseSource with columns PhraseId, Text, Modified 
Phrase  with columns PhraseId, Text, Modified 

的PhraseSource表包含5010行(一些新的和一些更改的行) 短語表包含5000行。我想用PhraseSource中新的和更改的行更新Phrase表。請注意,我的應用程序不需要顯示修改後的數據,但它被添加以防止插入或更新。

這是我想出來的。如果這是更新和插入的好方法,您可以告訴我嗎?

INSERT OR REPLACE INTO Phrase(PhraseId, Text) 
SELECT PS.PhraseId, PS.text FROM PhraseSource AS PS 

如果有一個更好的方式(自1970年以來,當行上次在源修改可能使用包含的秒數的體改列)要做到這一點,然後我也非常欣賞的任何建議。

+0

只替換刪除舊行,如果有衝突,所以它重寫,即使沒有多少實際變化整個表。 –

回答

1

5000行不算什麼;你可以刪除並複製整個表格。

如果你想最大限度地減少寫入變化的量,這可以很容易地與Modified柱進行:首先刪除年紀大了都行,然後複製了所有新行:

DELETE FROM Phrase 
WHERE Modified < (SELECT Modified 
        FROM PhraseSource 
        WHERE PhraseId = Phrase.PhraseId); 

INSERT OR IGNORE INTO Phrase(PhraseId, Text, Modified) 
SELECT PhraseId, Text, Modified FROM PhraseSource; 

Modified,同樣可以通過比較實際值來完成:

DELETE FROM Phrase 
WHERE Text IS NOT (SELECT Text 
        FROM PhraseSource 
        WHERE PhraseId = Phrase.PhraseId); 

INSERT OR IGNORE INTO Phrase(PhraseId, Text) 
SELECT PhraseId, Text FROM PhraseSource; 
相關問題