sqlite>vacuum;
VACUUM命令会清空“空闲列表”,把数据库尺寸压缩到最小。但是要耗费一些时间。
FQA里面说,在Linux的环境下,大约0.5秒/M。并且要使用两倍于数据库文件的空间。
我憎恨此FQA,他只说系统环境,不说机器硬件环境。我在测试手机上执行用了将近13秒时间压缩了将近3M的空间。至于它所占用的另一部分空间,是生成了一个.db-journal后缀名的临时文件。
没有自动编号?凡是删除一个语句都必须有删除的条件.例如删除最大行的数据
delete
table
where
id
=
(select
max(id)
from
table)
上面的语句就表示删除table里id最大的.
你用易语言取出的表只是一个虚拟表.你没有自动编号的话就得删除其他字段的一个特定值.
否则你的 *** 作虽然不会报错.但是也不会成功.因为你所获得的行记录只是虚拟表的.不影响真实表数据.
想要真正删除的话就得是
delete
table
where
bt
='请删除我'
StringBuilder where = new StringBuilder()for (int i = 0i <list.Lengthi++) {
string[] fullurl = list1[i].Split('|')
where.Append(string.Format("(Files_name='{0}' and Files_lastchangetime = '{1}') or ", fullurl))
}
where.Append(" 1 <1")
这样就可以拼成一个长where条件, 可以一次执行. 但是实际上数据库执行效率并不会有显著提高. 并且sql语句的长度会有限制, 如果数据量大的话就不能执行了.
你之所以感觉慢, 主要是因为你每次执行都会创建连接, 使用长连接或连接池(如果支持), 就能显著提高程序性能. 之后你可以观察下, 循环执行和拼接长SQL语句一次执行, 两者差异可以忽略不计.
在这样的前提下, 使用拼接SQL的方法要额外判断语句长度, 如处理不当, 程序可靠性会大打折扣. 所以改成使用连接池, 逐条执行是最可行的方案.
另: 执行delete语句应该使用ExecuteNonQuery方法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)