Тестировал различные технологии для автоматизации вставки данных в БД, при таких условиях:
- система хранения MyISAM
- СУБД MySQL 8/MariaDB 10.4
- Вставка 33 000 строк в 5 полей
- Код на C#/PHP/Node/Python
- запросы как подготовленные, так и обычная прямая вставка статичных значений
- запрос вида
INSERT INTO tablename (fieldA, fieldB, fieldC, fieldD, fieldE) VALUES (a, b, c, d, e)
ТаблицаCREATE TABLE `zip_code` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`zip` CHAR(5) NOT NULL,
`city` VARCHAR(50) NOT NULL,
`stid` CHAR(2) NOT NULL,
`state` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;
Результат для C#/PHP/Node - 14-15 (четырнадцать - пятнадцать) секунд.
Результат для Python - 1.5 (полторы) секунды!
Откуда такая разница в скорости вставки?
В пайтоне я использовал cursor.executemany() передавая массив с 1000 строк.
В PHP (PDO) я просмотрел все опции, но ничего для большей оптимизации там не подошло.
C#/Noda - там я использовал как указано в доках, каких то дополнительных опций я не нашел.
Какие такие особые механизмы работают в Python MySQL Connector (от Oracle) что позволяют
уделать все остальное? Что немного обидно - ведь я так верил в PHP и компилируемый C#.