原文地址:http://blog.163.com/gwo-cce@126/blog/static/3257364920100811458387/
插入3000条数据,两分钟没插完。。然后去网上找办法,才知道大批量数据插入需要用事物,否则效率会很低。原文如下:
insert时,没有使用事务的sqlite速度的确很慢
启用事务后,速度大大的提高了。
代码1(启用事务):
[PHP]
$link = sqlite_open('c:\\test.db')
sqlite_query($link,"begin");//打开事务
for ($i=0;$i<10000;$i++)
{
sqlite_query($link,"insert into tbl1 values('".time()."', ".$i.")");
}
sqlite_query($link,"commit");//提交事务
[/PHP]
代码2(没有事务):
[PHP]
$link = sqlite_open('c:\\test.db')
for ($i=0;$i<10000;$i++)
{
sqlite_query($link,"insert into tbl1 values('".time()."', ".$i.")");
}
[/PHP]
测试一下,就会发现两者速度相差很大
2.
数据库中delete 了数据,但是数据库的大小并不减少,里边的那些数据也都在,怎么才能让这些数据从数据库中真正删除?
sqlite_query($link,"VACUUM");//删除后,释放空间
SQLite3 在不执行行事务处理的情況下不是很理想, 但SELECT速度相当快。
MSSQL/Access无论是否执行事务处理的性能都相當不錯
MySQL的ByteFx与MyODBC在Insert/Delete的速度上差异略为明显。
sqlite在不开事务的情况下就是一种悲剧,因为它的多访问支持是建立在对文件的独占和共享基础上的。