SQLite データベースがあり、INSERT OR IGNORE
クエリを使用しています。主キーとして自動インクリメント int を持つテーブルと、別の一意の列があります。私の質問は、レコードが既に存在するかどうかを SQLite がどのようにチェックして、それを無視するかどうかを判断することです。最初に主キーをスキャンしてから、他の一意の列をスキャンしますか? もしそうなら、いくつかのクエリの主キーの前に一意の列を比較することは可能ですか? また、列が一意の場合、既にインデックスが作成されていますか?
2 に答える
2
UNIQUE 制約はインデックスを使用して実装されるため、UNIQUE 列には既にインデックスが作成されています。
INSERT OR IGNORE を評価するときに、INSERT ステートメントがテーブル内の UNIQUE 制約に違反する場合は、代わりに OR IGNORE が使用されます。評価の順序は機能的な観点からは重要ではなく、パフォーマンスへの影響はわずかです。おそらく、評価の順序はクエリ オプティマイザーによって処理されますが、そうでない場合でも、パフォーマンスへの影響は小さいはずです。
于 2012-10-03T18:17:15.687 に答える
1
どの程度深く掘り下げたいかにもよりますが、SQLite3 のソース コードをダウンロードし、「一意」や「制約」などの用語を検索することをお勧めします。質問に対するいくつかの回答は、ソースを読むだけで提供できます。数分。
コードは非常によく文書化されているようです。SQLite を頻繁に使用する場合は、少なくとも提供されたコメントを読むことは悪い考えではないかもしれません。あなたが期待するよりも多くの洞察がそこから得られるに違いありません。
于 2012-10-03T18:19:02.447 に答える