我有一个带有.schema
素数的大型sqlite3数据库,如下所示:
CREATE TABLE Primes(id INTEGER PRIMARY KEY, prime);
我试图提高以下查询的查找速度:
SELECT * FROM Primes WHERE prime < SOME_NUMBER ORDER BY id ASC;
据我所知,id
和prime
列都是有序的,查询应该能够在找到prime >= SOME_NUMBER
后立即停止。我理解为什么它没有,因为sqlite3无法知道prime
已经排序。
我可以在表上执行任何更改,让sqlite3知道prime
列已排序吗? (请注意,数据库会定期扩展,写入速度也很重要,即索引可能不是我read}
我的查询中是否有任何关键字可以让sqlite3在找到prime >= SOME_NUMBER
后停止?
答案 0 :(得分:0)
快速查找prime
需要对此列编制索引。
您可以使用clustered index prime
作为密钥的第一列,而不是向该列添加索引:
CREATE TABLE Primes(
prime,
id INTEGER,
PRIMARY KEY (prime)
) WITHOUT ROWID;
这使id
上的查找或排序变慢。
如果素数不是唯一的,则需要将id
添加到PK。