【问题标题】:Slow Selection Query even after indexing the table (sqlite and c++)即使在索引表(sqlite 和 c++)之后,选择查询也很慢
【发布时间】:2015-04-07 08:45:51
【问题描述】:

创建表格

我有一个由两个表组成的数据库:

  1. ENTITE_CANDIDATE
  2. 变化

使用以下查询创建表:

CREATE TABLE IF NOT EXISTS ENTITE_CANDIDATE (ID INTEGER PRIMARY KEY NOT NULL, ID_KBP TEXT NOT NULL, wiki_title TEXT, type TEXT NOT NULL);"

CREATE TABLE IF NOT EXISTS VARIATIONS (ID INTEGER PRIMARY KEY NOT NULL, ID_ENTITE INTEGER, NAME TEXT, TYPE TEXT, LANGUAGE TEXT, FOREIGN KEY(ID_ENTITE) REFERENCES ENTITE_CANDIDATE(ID));"
  • 表 ENTITE_CANDIDATE 由 818,742 条记录组成
  • 表 VARIATIONS 由 154,716,653 条记录组成

索引表

我使用以下查询索引了以前的表:

`CREATE INDEX var_id ON VARIATIONS (ID, ID_ENTITE, NAME);`
`CREATE INDEX entity_id ON ENTITE_CANDIDATE (ID, wiki_title);`

检索信息

我想从表 VARIATIONS 中检索以下记录:

"SELECT  ID, ID_ENTITE, NAME FROM VARIATIONS WHERE NAME=foo ;"

每个 select 查询大约需要 5.414931 秒。我知道该表包含大量记录。但是我可以让检索更快吗?我是否正确索引了表格?

【问题讨论】:

    标签: c++ sql sqlite


    【解决方案1】:

    documentation 说:

    如果索引的初始列……出现在 WHERE 子句中,则可能会使用该索引。

    此查询仅使用NAME 列进行搜索,因此无法使用var_id 索引。 (该索引仅对使用 ID 的查找有用,因为 ID 列已被索引为 PRIMARY KEY,所以这几乎是无用的。)

    【讨论】:

    • 好的@Cl。所以我不能在我的情况下使用索引。我可以在外键上使用索引吗?
    • 这取决于查询。文档解释了索引何时可用。
    • 你认为我可以如何加快选择查询?
    • 通过阅读文档。然后你知道你必须创建一个索引,它的初始列出现在 WHERE 子句中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多