我想在我的sqlite数据库中查询所有大于20的“级别”值,将结果限制为100并按rowid排序。按rowid排序时,查询会慢很多。该数据库包含约300万条记录level的最大值为50,为level创建索引。此语句耗时约20毫秒:SELECT*FROMlogWHERElevel>20LIMIT100此语句耗时约100毫秒:SELECT*FROMlogWHERElevel>20ORDERBYrowidLIMIT100此语句耗时约1000毫秒(不存在级别值大于50的行):SELECT*FROMlogWHERElevel>50ORDERBYrowidLIMIT100有没有办法优化它以获得更快
我目前正在开发一个将数据存储在SQLite中的应用程序数据库。数据库的读取访问权限将比写入访问权限多得多(实际上,它会被数据填充一次,然后几乎只会发生读取)。因此,读取性能更为重要。我目前正在开发的架构在未来很可能会发生变化,会添加更多的列和表。一般来说,我对数据库没有太多经验。我的问题是,特别是在SQLite中,更改架构时是否需要考虑任何陷阱?是否有任何模式或最佳做法可以为此类情况提前计划? 最佳答案 这里有一些建议:不要使用select*from...,因为*的含义会随着模式的变化而变化;明确命名您的查询使用的列将模式版本号保存
我目前正在开发一个将数据存储在SQLite中的应用程序数据库。数据库的读取访问权限将比写入访问权限多得多(实际上,它会被数据填充一次,然后几乎只会发生读取)。因此,读取性能更为重要。我目前正在开发的架构在未来很可能会发生变化,会添加更多的列和表。一般来说,我对数据库没有太多经验。我的问题是,特别是在SQLite中,更改架构时是否需要考虑任何陷阱?是否有任何模式或最佳做法可以为此类情况提前计划? 最佳答案 这里有一些建议:不要使用select*from...,因为*的含义会随着模式的变化而变化;明确命名您的查询使用的列将模式版本号保存
这是我的代码:conn=sqlite3.connect(nnpcconfig.commondb)cur=conn.cursor()query=['2124124','test2','test3','test4','test5']cur.execute("insertintousers(id,encpass,sname,name,fname)values(?,?,?,?,?)",query)conn.commitcur.execute("select*fromusers")forrowincur:printrow这段代码有效,返回了提供给它的行。但事实证明,一旦脚本终止,表格就会再次清除
这是我的代码:conn=sqlite3.connect(nnpcconfig.commondb)cur=conn.cursor()query=['2124124','test2','test3','test4','test5']cur.execute("insertintousers(id,encpass,sname,name,fname)values(?,?,?,?,?)",query)conn.commitcur.execute("select*fromusers")forrowincur:printrow这段代码有效,返回了提供给它的行。但事实证明,一旦脚本终止,表格就会再次清除
全部,我正在尝试在TEXT字段中将长文本条目注入(inject)SQLite数据库。此文本中有新行(即它跨越多个段落)。如果我手动执行INSERT,我可以显示新行:INSERTINTO"LOGENTRY"VALUES(5,40,'PLACE','line1line2line4',1283990533315,'4A','TEXT','',NULL);但是如果我在CSV文件中有等效的文本并尝试将其导入表中,我会收到一个错误,提示它期望的列数多于现有的列数(只要遇到新行,程序就会假定它是输入的末尾,因此它缺少列)。这可能吗?还是手动执行每个INSERT的唯一方法?
全部,我正在尝试在TEXT字段中将长文本条目注入(inject)SQLite数据库。此文本中有新行(即它跨越多个段落)。如果我手动执行INSERT,我可以显示新行:INSERTINTO"LOGENTRY"VALUES(5,40,'PLACE','line1line2line4',1283990533315,'4A','TEXT','',NULL);但是如果我在CSV文件中有等效的文本并尝试将其导入表中,我会收到一个错误,提示它期望的列数多于现有的列数(只要遇到新行,程序就会假定它是输入的末尾,因此它缺少列)。这可能吗?还是手动执行每个INSERT的唯一方法?
当使用PerlDBD::SQLite时,SQLite是否存在一个已知问题,在单个事务中为第二个查询提供“数据库已锁定”错误?场景:Linux、PerlDBI、AutoCommit=>0,一个包含两个代码块的子例程(使用代码块来本地化变量名称)。在第一个代码块中,查询句柄由prepare()在select语句上创建,它被executed()并关闭block。第二个代码块另一个查询句柄是由准备更新语句创建的,并且经常(30%的时间)SQLite/DBI在此阶段给出数据库锁定错误。我认为错误发生在prepare()期间而不是execute()期间。我的解决方法是在第一个查询之后提交。(在第一
当使用PerlDBD::SQLite时,SQLite是否存在一个已知问题,在单个事务中为第二个查询提供“数据库已锁定”错误?场景:Linux、PerlDBI、AutoCommit=>0,一个包含两个代码块的子例程(使用代码块来本地化变量名称)。在第一个代码块中,查询句柄由prepare()在select语句上创建,它被executed()并关闭block。第二个代码块另一个查询句柄是由准备更新语句创建的,并且经常(30%的时间)SQLite/DBI在此阶段给出数据库锁定错误。我认为错误发生在prepare()期间而不是execute()期间。我的解决方法是在第一个查询之后提交。(在第一
我们正在创建一个与服务器同步5000个日历条目的应用程序。问题是在添加1913个条目后失败并给出以下堆栈跟踪。有什么问题?12-3011:48:16.989:DEBUG/dalvikvm(384):GC_EXPLICITfreed5699objects/345848bytesin579ms12-3011:48:22.530:DEBUG/dalvikvm(232):GC_EXPLICITfreed2552objects/124160bytesin311ms12-3011:48:24.560:ERROR/CursorWindow(232):needtogrow:mSize=1048576,