我有一个按以下方式创建的sqlite表:
CREATE TABLE data (Year TEXT, County TEXT, Region TEXT, Town TEXT, Page TEXT, Surname TEXT, Forename TEXT, Age TEXT, Sex TEXT, Relation TEXT, Religion TEXT, Birthplace TEXT, Occupation TEXT, Literacy TEXT, Language TEXT, Marital_Status TEXT, Specified_Illnesses TEXT, Years_Married TEXT, Children_Born TEXT, Children_Living TEXT, House_Name TEXT);
该表与我的数据库中的任何其他表无关。表格中有900万行。分贝为1.5G。运行单个查询的时间差异很大,例如:
sqlite> .timer ON
sqlite> SELECT DISTINCT Year FROM census_data;
[Two values outputted]
Run Time: real 18.921 user 1.880007 sys 0.932251
然后我跑了
sqlite> SELECT DISTINCT County FROM census_data;
[50 values outputted]
Run Time: real 6.444 user 2.437792 sys 0.746738
然后:
sqlite> SELECT DISTINCT Year FROM census_data;
[Two values outputted]
Run Time: real 5.643 user 1.717557 sys 0.758017
然后:
sqlite> SELECT DISTINCT County FROM census_data;
[50 values outputted]
Run Time: real 3.106 user 2.394552 sys 0.689175
然后我开始写这篇文章,然后再回到sqlite3,这次我得到了:
sqlite> SELECT DISTINCT County FROM census_data;
[50 values outputted]
Run Time: real 90.853 user 2.691074 sys 1.718229
我的桌子是问题吗,还是我需要为sqlite3提供更多的内存?如果是的话,我该怎么做?
更新
我应该指出,我现在不创建数据库就写入数据库,而是运行以下命令,以防数据库损坏,但查询仍然显示此问题:
sqlite3 data.sqlite ".dump" | sqlite3 new.sqlite