он содержит очень много повторов по столбцам и по строкам.
-- Решил перекинуть это в базу данных, чтобы было проще. Но я не шарю в этом всем.
-- Проблема в том, что скорость вставки примерно 10 записей в секунду.
-- Как увеличить скорость вставки?
CREATE TABLE "HistoryData" (
"Id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"barId" integer NOT NULL,
"blablaId" integer NOT NULL,
"fooId" integer NOT NULL,
-- и так еще десяток столбцов
CONSTRAINT "fk_HistoryData_bar_1" FOREIGN KEY ("barId") REFERENCES "bar" ("Id"),
CONSTRAINT "fk_HistoryData_blabla_1" FOREIGN KEY ("blablaId") REFERENCES "blabla" ("Id"),
CONSTRAINT "fk_HistoryData_foo _1" FOREIGN KEY ("fooId") REFERENCES "foo" ("Id")
);
CREATE TABLE "blabla" (
"Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"blabla" TEXT
);
CREATE UNIQUE INDEX "blabla_AK"
ON "blabla" (
"blabla"
);
-- и все остальные аналогично.
--- вставляю через python sqlite3 executescript с такими параметрами.
--- connect.execute('PRAGMA foreign_keys = ON;')
--- connect.execute('PRAGMA journal_mode = WAL;')
--- connect.execute('PRAGMA synchronous = normal;')
--- connect.execute('PRAGMA encoding="UTF-8";')
--- connect.execute('PRAGMA temp_store = memory;')
--- connect.execute('PRAGMA mmap_size = 30000000000;')
INSERT INTO foo(Id, foo)
SELECT NULL, {foo}
WHERE NOT EXISTS(SELECT 1 FROM foo WHERE foo = {foo});
INSERT INTO bar(Id, bar)
SELECT NULL, {bar}
WHERE NOT EXISTS(SELECT 1 FROM bar WHERE bar = {bar});
INSERT INTO HistoryData
(
Id,
barId,
fooId
)
SELECT
NULL,
(SELECT Id FROM bar WHERE bar = {bar}),
(SELECT Id FROM foo WHERE foo = {foo})
WHERE NOT EXISTS(
SELECT 1
FROM HistoryData
WHERE
barId = (SELECT Id FROM bar WHERE bar = {bar}) AND
fooId = (SELECT Id FROM foo WHERE foo = {foo})
);
Вставлять в бд прямо из csv вот так https://www.internet-technologies.ru/articles/import-csv-fayla-v-tablicu-mysql.html
Обсуждают сегодня