#include <SQLite.au3>
#include <SQLite.dll.au3>
main("test.db",1000)
Func main($DB,$III)
Local $aRow
$begin = TimerInit()
_SQLite_Startup()
_SQLite_Open ($DB)
_SQLite_Exec(-1, "begin")
_SQLite_Exec (-1, "CREATE TABLE test (id INTEGER PRIMARY KEY,body);")
For $i = 0 To $III
_SQLite_QuerySingleRow(-1,"Select id FROM test WHERE id='"&$i&"';",$aRow)
If $aRow[0] Then
_SQLite_Exec(-1, "UPDATE test SET body='body' WHERE id='"&$i&"';")
ConsoleWrite("修改数据 "&$i&@CRLF)
Else
_SQLite_Exec(-1, "Insert into test (id,body) values ("&$i&",'body');")
ConsoleWrite("插入数据 "&$i&@CRLF)
EndIf
Next
_SQLite_Exec(-1, "commit")
_SQLite_Close ()
_SQLite_Shutdown()
$dif = TimerDiff($begin)
MsgBox(0,"执行时间",Floor($dif)&" 毫秒",3)
EndFunc
_SQLite_Exec(-1, "begin") 和 _SQLite_Exec(-1, "commit") 事务模式,在多次查询时速度提高明显。
sqlite不需要设定数据类型,但是最好设定下主键 INTEGER PRIMARY KEY ,在数据量大时查询速度会提高很多。
网上查了下,如果设置INTEGER PRIMARY KEY后就是打开了索引,这方面不懂,但是确实很有效,
今天测试一程序,数据量一多,循环 Select 和 UPDATE 查询几乎停滞。调试了很久才解决了这问题,所以发上来大家交流一下。 |