我有一个有三列的表。
_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”列上添加索引以加快性能,因为我必须对其进行频繁查询。但后来我在Indexes tutorial by TutorialsPoint中阅读了以下有趣的陈述:
隐含索引:
隐式索引是由。自动创建的索引 创建对象时的数据库服务器。 自动生成索引 为主键约束和唯一约束创建。
因为我已经在“word”列中添加了一个唯一约束,所以不需要做任何其他事情。那是对的吗?我试图在SQLite documentation中确认这一点,但我找不到它。
答案 0 :(得分:6)
正确。 UNIQUE创建一个索引。这就是大多数数据库实际执行它的方式。
想象一下,他们没有创建索引,会发生什么。他们真的需要对每个插件进行全表扫描,这意味着性能将会消失。