Etant au boulot, je n'ai pas pu tester à fond.
Voilà le résultat de mes tests.
Ils ont été réalisés sans le debugger en utilisant des transactions.
30k INSERT : 1297 ms
300k INSERT : 8391 ms
3000k INSERT : 85969 ms
Les tailles de fichier :
Et le code qui a servi au test :
Code : Tout sélectionner
; Création du fichier de test
Procedure CreateTestFile(file.s, line.l)
If CreateFile(0, file)
i.l
While i <= line
req.s = "INSERT INTO test (id, x, y) VALUES (" + Str(i) + ", 'atr', 100)"
WriteStringN(0, req)
i + 1
Wend
CloseFile(0)
EndIf
EndProcedure
Procedure CreateDatabase(databaseFile.s)
If FileSize(databaseFile) = -1
; Création du fichier
CreateFile(0, databaseFile)
CloseFile(0)
; Création de la table principal
OpenDatabase(0, databaseFile, "", "", #PB_Database_SQLite)
DatabaseUpdate(0, "CREATE DATABASE test_database")
req.s = "CREATE TABLE test (id Int(9), x varchar(3), y int(3))"
DatabaseUpdate(0, req)
CloseDatabase(0)
EndIf
EndProcedure
Procedure RemplirDatabase(databaseFile.s, file.s)
If OpenFile(2, file + ".log.txt")
WriteStringN(2,"[Debut LOG : " + FormatDate("%hh:%ii:%ss", Date()) + "]")
If ReadFile(1, file)
OpenDatabase(0, databaseFile, "", "", #PB_Database_SQLite)
Debug_A = ElapsedMilliseconds()
; TEST TRANSACTION
DatabaseUpdate(0, "BEGIN")
While Eof(1) = 0
Debug_C = ElapsedMilliseconds()
line.s = ReadString(1)
DatabaseUpdate(0, line)
Debug_D = ElapsedMilliseconds()
;WriteStringN(2,"Temps d'éxécution insert : " + Str(Debug_D - Debug_C) + " ms ")
Wend
; TEST TRANSACTION
DatabaseUpdate(0, "COMMIT")
Debug_B = ElapsedMilliseconds()
WriteStringN(2, "Temps d'éxécution total : " + Str(Debug_B - Debug_A) + " ms ")
CloseDatabase(0)
CloseFile(1)
Else
MessageRequester("Erreur lors de l'import", "Impossible de lire le fichier à importer : " + #CRLF$ + file)
EndIf
WriteStringN(2,"[Fin LOG]")
CloseFile(2)
EndIf
EndProcedure
SetCurrentDirectory("C:\")
;- Librairies
UseSQLiteDatabase()
; 6 Fichiers de test
CreateTestFile("test_1.sql", 30000)
CreateTestFile("test_2.sql", 300000)
CreateTestFile("test_3.sql", 3000000)
; Création de la base
CreateDatabase("database_1.db")
CreateDatabase("database_2.db")
CreateDatabase("database_3.db")
; On rempli la base
RemplirDatabase("C:\database_1.db", "C:\test_1.sql")
RemplirDatabase("C:\database_2.db", "C:\test_2.sql")
RemplirDatabase("C:\database_3.db", "C:\test_3.sql")
; On affiche le nombre de ligne en base
OpenDatabase(0, "C:\database_1.db", "", "", #PB_Database_SQLite)
DatabaseQuery(0, "SELECT COUNT(*) FROM test")
NextDatabaseRow(0)
MessageRequester("Lignes BD 1", StrU(GetDatabaseLong(0, 0), #Long) + " lignes en base")
CloseDatabase(0)
OpenDatabase(0, "C:\database_2.db", "", "", #PB_Database_SQLite)
DatabaseQuery(0, "SELECT COUNT(*) FROM test")
NextDatabaseRow(0)
MessageRequester("Lignes BD 2", StrU(GetDatabaseLong(0, 0), #Long) + " lignes en base")
CloseDatabase(0)
OpenDatabase(0, "C:\database_3.db", "", "", #PB_Database_SQLite)
DatabaseQuery(0, "SELECT COUNT(*) FROM test")
NextDatabaseRow(0)
MessageRequester("Lignes BD 3", StrU(GetDatabaseLong(0, 0), #Long) + " lignes en base")
CloseDatabase(0)