无需在具有UNIQUE约束的列上创建索引,对吧?

时间:2016-04-27 03:32:07

标签: sql sqlite sqlite.swift

我有一个有三列的表。

_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中确认这一点,但我找不到它。

1 个答案:

答案 0 :(得分:6)

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

想象一下,他们没有创建索引,会发生什么。他们真的需要对每个插件进行全表扫描,这意味着性能将会消失。