2012-10-03 45 views
2

我有一個SQLite數據庫,並使用INSERT OR IGNORE查詢。我有一個自動增量int作爲主鍵和另一個獨特的列表。我的問題是,SQLite如何檢查記錄是否已經存在,以便它知道是否忽略它?它是首先掃描主鍵,然後掃描其他唯一列嗎?如果是這樣,它有可能比較主鍵之前的唯一列進行某些查詢嗎?另外,如果一列是唯一的,它是否已經編入索引?SQL如何檢查記錄是否存在?

回答

2

UNIQUE約束是使用索引實現的,所以UNIQUE列已經編入索引。

當評估INSERT或忽略,如果表中的任何 UNIQUE約束將通過INSERT語句被侵犯時,或忽略代替。從功能角度來看,評估的順序並不重要,應該對性能產生很小的影響。據推測,評估順序是由查詢優化器處理的,但如果不是,性能命中率應該很小。

+0

謝謝,我不確定是否會有顯着的性能差異。 – TryNCode

1

根據您想有多深去,我可能會建議downloading the SQLite3 source code,並開始通過它來搜索諸如「唯一」和「約束」條件 - 通過在剛剛源讀取可以提供一些回答您的問題幾分鐘。

該代碼似乎是異常詳細記錄。如果您打算大量使用SQLite,至少閱讀所提供的註釋並不是一個壞主意。我敢打賭,你可能會從中得到更多的洞察力。

+0

感謝您的建議。通常通過代碼搜索,由於缺乏任何體面的文檔,我感到困惑。將通過這一看看,但其他有趣的提示。 – TryNCode