有序列中的SQL SELECT

时间:2016-12-04 11:34:10

标签: sql sqlite

我有一个带有.schema素数的大型sqlite3数据库,如下所示:

CREATE TABLE Primes(id INTEGER PRIMARY KEY, prime);

我试图提高以下查询的查找速度:

SELECT * FROM Primes WHERE prime < SOME_NUMBER ORDER BY id ASC;

据我所知,idprime列都是有序的,查询应该能够在找到prime >= SOME_NUMBER后立即停止。我理解为什么它没有,因为sqlite3无法知道prime已经排序。

  1. 我可以在表上执行任何更改,让sqlite3知道prime列已排序吗? (请注意,数据库会定期扩展,写入速度也很重要,即索引可能不是我read}

  2. 的好选择。
  3. 我的查询中是否有任何关键字可以让sqlite3在找到prime >= SOME_NUMBER后停止?

1 个答案:

答案 0 :(得分:0)

快速查找prime需要对此列编制索引。

您可以使用clustered index prime作为密钥的第一列,而不是向该列添加索引:

CREATE TABLE Primes(
    prime,
    id INTEGER,
    PRIMARY KEY (prime)        
) WITHOUT ROWID;

这使id上的查找或排序变慢。 如果素数不是唯一的,则需要将id添加到PK。