【发布时间】:2014-11-30 12:10:23
【问题描述】:
我有一个 Tune 表,其中包含一个 _id 字段和一个 MD5 字段.. 以及与此问题无关的其他字段。当我执行以下语句时,我会恢复我的 MD5 值:
SELECT MD5 FROM Tune WHERE _id='5'
我有一个索引 ITUNEID,我尝试使用它来加快定位曲调记录:
CREATE INDEX ITUNEID ON Tune (_id)
当我使用以下语句时,我收到“无查询解决方案”错误。
SELECT MD5 FROM Tune INDEXED BY ITUNEID WHERE _id='5'
上述说法有什么问题?
我忘了说 _id 是主键。这就是问题所在吗?在涉及主键的地方指定使用索引是否违法?
【问题讨论】:
-
抛开贴出来的问题,为什么觉得这里需要指定索引呢?如果是主键,SQLite 应该会自动选择正确的索引。
-
@LasseV.Karlsen:那是我的误解——我没有意识到它实际上是一个主键。我不明白为什么 INDEXED BY 在我的代码的其他地方工作而不是这个查询。只是想通过 SQL 语句稍微优化一下代码。
-
INDEXED BY的文档有这样的文字:“...必须使用命名索引才能在前面的表中查找值”,是否该索引必须包含MD5 列也是? -
“普通”主键和INTEGER PRIMARY KEY 之间存在差异。
-
@LasseV.Karlsen:我不这么认为。我在我的应用程序中使用了大约 10 个不同的索引(索引?),它们都运行良好。只有这个我使用了 _id 没有工作。顺便说一句,我不是 SQL 大师 :)
标签: sql sqlite select indexing