【问题标题】:SQLite gives automatic index warnings, even though the key is the first key in an explicit indexSQLite 给出自动索引警告,即使键是显式索引中的第一个键
【发布时间】:2019-03-06 21:21:42
【问题描述】:

我有一个具有以下架构的表:

CREATE TABLE LoanEvents (
    Id integer primary key not null, 
    LoanId integer not null default '0', 
    Period integer not null default '0',
    ... more data
    )

它定义了一个索引:

CREATE UNIQUE INDEX LoanEvents_LoanId_Period
    on LoanEvents(LoanId,Period)

我正在这个表上运行一个带有连接的复杂查询,我收到了以下消息:

SQLite warning (284): automatic index on LoanEvents(LoanId)

当已经有一个以 LoanId 作为第一个键的索引时,为什么我会收到此警告?

在不添加不必要的索引的情况下,我可以做些什么来消除警告?

【问题讨论】:

  • 显示查询?另请阅读如何解释 EXPLAIN QUERY PLAN 输出。
  • 另外,具有唯一索引的默认列值有点奇怪。如果您在填充表后尝试创建该索引,您确定它成功了吗?
  • @DourHighArch 并不是真正的重复,因为 OP 已经在相关列上建立了索引。
  • 仅供参考,它不是重复的,因为我已经有一个合适的索引。是的,索引存在(我从实际数据库的模式中复制了 create 语句)。该查询非常复杂(涉及大约 8 个表)并且在此处发布是保密的。如果没人知道即兴的答案,我会尝试创建一个非机密版本并发布。

标签: c# sqlite


【解决方案1】:

我找到了答案 - 我的查询在其 JOIN 中出现错误 - 我不小心将 LoanId 加入了一个字符串字段(与我要加入的整数字段的名称非常相似)。

据我所知,这意味着 SQLite 需要 LoanId 上的字符串索引,而不是它已有的整数索引。

显示为可能重复的问题,SQLite Database gives warning automatic index on <table_name>(column) After upgrading Android L 实际上在第二个答案中包含一个线索,它指出索引必须与需要它的列具有相同的排序规则。我想我们可以添加它也应该具有相同的类型。

【讨论】:

    【解决方案2】:

    我希望这会有所帮助:SQLite Gives Automatic Index Warning

    免责声明:我还没有亲自测试过。

    【讨论】:

    • 考虑到该帖子是关于 not 在列上有索引,而 OP 的帖子清楚地表明他正在对有问题的列建立索引......你也在做同样的事情错误地将这篇文章标记为与那篇文章重复的人做了。
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2021-01-08
    • 2015-02-07
    • 2011-07-01
    • 2017-04-09
    相关资源
    最近更新 更多