甚至在索引表(sqlite和c ++)之后的慢选择查询

时间:2015-04-07 08:45:51

标签: c++ sql sqlite

创建表

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

  1. ENTITE_CANDIDATE
  2. VARIATIONS
  3. 使用以下查询创建表:

    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 记录组成
    • 表变化由 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 ;"
    

    每次选择查询都会占用 5.414931 秒。我知道该表包含大量记录。但我可以更快地进行检索吗?我正确地索引表吗?

1 个答案:

答案 0 :(得分:1)

documentation说:

  

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

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