Если вы используете оболочку bash, вы можете использовать это:
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;"'
Или, если вы находитесь в sqlite CLI, вам нужно сделать это:
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;
Как это работает?
Он использует это, если таблица tab
:
id int
------
1
2
затем select a.id, b.id from tab a, tab b
возвращает
a.id int | b.id int
------------------
1 | 1
2 | 1
1 | 2
2 | 2
и так далее. После первого выполнения мы вставляем 2 строки, затем 2 ^ 3 = 8. (три, потому что у нас есть tab a, tab b, tab c
)
После второго выполнения мы вставляем дополнительные (2+8)^3=1000
строки
После этого мы вставляем около max(1000^3, 5e5)=500000
строк и так далее ...
Это самый быстрый из известных мне способов заполнения базы данных SQLite.