sqlite多⾏插⼊_sqlite⼀次插⼊多条记录的优化⽅法
Date: 2014-08-09
Summary: 有⼤量的数据要插⼊数据库,但是每次只写⼊⼀条在速度上很难接受。本⽂介绍了在sqlite数据库中⼀次插⼊多条记录的优化⽅法。
sqlite⼀次插⼊多条记录的优化⽅法
问题
今天在使⽤sqlite向表中插⼊数据的时候发现,对于⼀次插⼊多条记录的问题来说,insert into的执⾏速度慢到了⽆法接受。我在实际的使⽤中,想⼀次性插⼊200条记录,要做1000次左右的插⼊,这样的话,我每次都要把200条记录的插⼊语句组织成⼀个长字符串,然后执⾏⼀次executeUpdate语句。没想到插⼊操作这么慢,只好请教搜索引擎,看有没有什么好办法。
试验
答案当然是有的。因为我⼀直使⽤的sql语句是类似MySQL的:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
根据⽹友的回复,只需要使⽤不同的语法,在SQLite中把插⼊语句重写成:
INSERT INTO 'tablename'
SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION SELECT 'data3', 'data4'
mysql操作官方文档UNION SELECT 'data5', 'data6'
UNION SELECT 'data7', 'data8'
我把原来的代码改成新的代码以后,发现速度明显是快多了!简单做了⼀下测试,原来的⽅法做10次
插⼊操作,每次写⼊如200条数据已经需要222137ms,新的⽅法做同样的操作只需要1841ms,这到底是什么节奏?
查看了⼀下SQLite的官⽅⽂档,原来insert 还真有这种⽤法的。
SQLite insert
sqlite insert
⽽且官⽅⽂档上⾯很明确的说明,insert语句有三种基本的形式,但是性能上为什么会有如此⼤的差别?这个还真是没有想明⽩。。。
怎样检查⼀个表是否存在
另外顺便记⼀下,在SQLite中查询⼀个表是否存在的⽅法:
SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';
table_name就是传进去要查的表的名字,当然也可以不要。这个语句会返回数据库中的表名字哦!
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。