CREATE TABLE SomeItems (
identifier INTEGER PRIMARY KEY NOT NULL,
filename TEXT NOT NULL, path TEXT NOT NULL,
filesize INTEGER NOT NULL, thumbnail BLOB,
pickedStatus INTEGER NOT NULL,
deepScanStatus INTEGER NOT NULL,
basicScanStatus INTEGER NOT NULL,
frameQuanta INTEGER,
tcFlag INTEGER,
frameStart INTEGER,
creationTime INTEGER
);
用大约20,000条记录填充这个表,其中缩略图是一个小的jpeg,然后执行如下几个查询:
time sqlite3 Catalog.db 'select count(*) from SomeItems where filesize = 2;'
time sqlite3 Catalog.db 'select count(*) from SomeItems where basicScanStatus = 2;'
4条答案
按热度按时间kyxcudwk1#
这在任何DBMS中都不是一个简单的任务。几乎可以肯定的是,你必须创建一个具有你想要的顺序的新表,并将你的数据从一个表移动到这个顺序。没有alter table语句来对列进行重新排序,所以无论是在sqlite管理器中还是在任何其他地方,你都不会找到在同一个表中这样做的方法。
如果确实要更改顺序,可以执行以下操作:
假设您有表A:
您可以创建一个表B,其中的列按您想要的方式排序:
然后将数据从tableA移动到tableB:
然后删除原始表A并将表B重命名为表A:
SQL小提琴演示
lokaqttq2#
在SELECT语句中,您始终可以按照自己的意愿对列进行排序,如下所示:
您不应该需要在表本身中对它们进行“排序”。
iqxoj9l93#
sqlite3中的顺序确实很重要,从概念上讲,它不应该如此,但请尝试下面的实验来证明它的重要性:
用大约20,000条记录填充这个表,其中缩略图是一个小的jpeg,然后执行如下几个查询:
不管返回多少条记录,在我的机器上,第一次查询花费大约0m0.008s,而第二次查询花费0m0.942s。
filesize
在Blob之前,basicScanStatus
在Blob之后。现在我们已经将Blob移到了它自己的表中,我们的应用程序运行良好。
x0fgdtte4#
你可以使用Sqlite Browser重新排序它们