2016-04-27 6 views
0

私は3つの列を持つテーブルを持っています。 SQLite.swiftUNIQUE制約を持つ列にインデックスを作成する必要はありません。

_id (primary key) word (unique)  frequency 

私はこの

try db.run(userDictionary.create(ifNotExists: true) {t in 
    t.column(wordId, primaryKey: true) 
    t.column(word, unique: true) 
    t.column(frequency, defaultValue: 1) 
    }) 

のような表を作成し、私は「言葉」列に索引を追加するために準備していた

CREATE TABLE "words" (
    "_id" INTEGER PRIMARY KEY NOT NULL, 
    "word" TEXT UNIQUE NOT NULL, 
    "frequency" INTEGER DEFAULT 1 
) 

だろうSQLiteの構文を信じます頻繁にクエリを実行する必要があるため、パフォーマンスを向上させることができます。

暗黙のインデックス:しかし、私は Indexes tutorial by TutorialsPointで次興味深いの文を読んで

が暗黙のインデックスは、オブジェクトが作成されたときに自動的に データベースサーバによって作成されたインデックスです。 インデックスは自動的に主キー制約とユニーク制約のために作成 です。

「ワード」列に既に一意の制約が追加されているため、他に何もする必要はありません。あれは正しいですか?私はSQLite documentationでこれを確認しようとしましたが、見つけられませんでした。

+1

[Documentation](http://www.sqlite.org/fileformat2.html#sqlite_master):「テーブルのUNIQUEおよびPRIMARY KEY制約により、SQLiteが内部索引を作成する」 –

+0

@ CL。ドキュメントのリンクをありがとう。それは公式の情報源でそれを見ることを安心して助けます。 – Suragch

答えて

1

正しいです。 UNIQUEは索引を作成します。これはほとんどのデータベースが実際にそれを強制する方法です。

はどうなるのか、彼らはインデックスを作成していない想像してみてください。文字通り、すべてのインサートでフル・テーブル・スキャンを実行する必要があり、パフォーマンスがウィンドウの外に出ることを意味します。

関連する問題