【发布时间】:2017-03-17 19:03:24
【问题描述】:
假设我有一个带有单词表的数据库,如下所示:
CREATE TABLE Words (
Id integer PRIMARY KEY NOT NULL,
Word text NOT NULL
);
CREATE INDEX Word_Index ON Words (Word ASC);
sqlite> SELECT * FROM Words;
Id|Word
1|apple
2|Apple
3|Jack
4|jack
为了简单起见,我只关心 ascii 字符,就区分大小写而言。
我想要做的是搜索 Word 并首先返回返回精确区分大小写匹配的行,然后是所有匹配的行,忽略大小写,不重复。 例如,SELECT * FROM Words WHERE … ‘Apple’ 会返回:
2|Apple
1|apple
同样,SELECT * FROM Words WHERE … ‘apple’ 会返回:
1|apple
2|Apple
我主要关心区分大小写的匹配,但希望它们后面跟着不区分大小写的匹配,作为后备。我希望通常我会在区分大小写的匹配中获得命中,这就是为什么我有一个区分大小写的索引。我意识到不区分大小写的回退将无法使用索引,但我选择不使用第二个(COLLATE NOCASE)索引以节省数据库空间,因为无论如何它可能不会经常使用.通常我只会踩一次,抓住第一击。
最有效的方法是什么?
【问题讨论】: