5

我有一个三列的表。

_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
)

我正准备在“word”列上添加一个索引以提高性能,因为我将不得不对其进行频繁的查询。但后来我在TutorialsPoint 的 Indexes 教程中阅读了以下有趣的陈述:

隐式索引:

隐式索引是在创建对象时由数据库服务器自动创建的索引。为主键约束和唯一约束自动创建索引。

因此,由于我已经为“word”列添加了唯一约束,因此无需执行任何其他操作。那是对的吗?我试图在SQLite 文档中确认这一点,但我找不到。

4

1 回答 1

10

正确的。UNIQUE 创建一个索引。这就是大多数数据库实际执行它的方式。

想象一下他们没有创建索引,会发生什么。他们实际上需要对每次插入进行全表扫描,这意味着性能将超出预期。

于 2016-04-27T03:38:32.710 回答