5

3列のテーブルがあります。

_id (primary key)    word (unique)     frequency

SQLite.swiftで、このようなテーブルを作成します

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

私はSQLiteの構文が

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

「単語」列に頻繁にクエリを実行する必要があるため、パフォーマンスを高速化するために「単語」列にインデックスを追加する準備をしていました。しかしその後、TutorialsPoint による Indexes チュートリアルで次の興味深いステートメントを読みました。

暗黙的なインデックス:

暗黙的なインデックスは、オブジェクトの作成時にデータベース サーバーによって自動的に作成されるインデックスです。主キー制約と一意性制約のインデックスは自動的に作成されます。

したがって、「単語」列には既に一意制約を追加しているので、他に何もする必要はありません。あれは正しいですか?SQLiteのドキュメントでこれを確認しようとしましたが、見つかりませんでした。

4

1 に答える 1

10

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

彼らがインデックスを作成しなかったと想像してみてください。文字通り、すべての挿入で完全なテーブル スキャンを実行する必要があり、それはパフォーマンスが低下することを意味します。

于 2016-04-27T03:38:32.710 に答える