Wenn Sie die Bash-Shell benutzen, können Sie dies verwenden:
time bash -c $'
FILE=/dev/shm/test.db
sqlite3 $FILE "create table if not exists tab(id int);"
sqlite3 $FILE "insert into tab values (1),(2)"
for i in 1 2 3 4; do sqlite3 $FILE "INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5"; done;
sqlite3 $FILE "select count(*) from tab;"'
Oder wenn Sie in sqlite CLI sind, dann müssen Sie dies tun:
create table if not exists tab(id int);"
insert into tab values (1),(2);
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
select count(*) from tab;
Wie funktioniert das? Es macht Gebrauch von der if-Tabelle tab
:
id int
------
1
2
dann select a.id, b.id from tab a, tab b
gibt zurück.
a.id int | b.id int
------------------
1 | 1
2 | 1
1 | 2
2 | 2
und so weiter. Nach der ersten Ausführung fügen wir 2 Zeilen ein, dann 2^3=8. (drei, denn wir haben tab a, tab b, tab c
)
Nach der zweiten Ausführung fügen wir zusätzliche (2+8)^3=1000
Zeilen
Danach legen wir über max(1000^3, 5e5)=500000
Zeilen und so weiter...
Dies ist die schnellste mir bekannte Methode zum Auffüllen der SQLite-Datenbank.
6 Stimmen
Auf Beilagen: stackoverflow.com/questions/1711631/
5 Stimmen
Ja, ab der Version 2012-03-20 (3.7.11) wird Ihre Syntax unterstützt.