之前我阿湯博客寫過一篇文檔《Flask-SQLAlchemy批量插入數(shù)據(jù)性能測試》,當時對幾種批量插入Mysql數(shù)據(jù)庫的方法做了性能比較。
只要不是通過for循環(huán)一條條插入,另外幾種方法都比較快的,一萬條數(shù)據(jù)也就0.6s左右。
但是最近我在做一個通過導入Excel或者csv文件,然后把數(shù)據(jù)批量寫入數(shù)據(jù)庫功能,使用bulk_insert_mappings方法發(fā)現(xiàn)性能下降挺厲害。
一共7600條數(shù)據(jù),寫入數(shù)據(jù)庫的時間要20-30s左右,字段也才十多個。
經(jīng)過了五六個小時的測試,這個過程就不贅述了,更換了各種方法、各種姿勢。下面分享給大家,希望對看到這篇文章的人有幫助。
主要原因就是因為同一個字段里面同時存在str和None的原因?qū)е隆?/p>
因為導入文件里面有幾列時間,數(shù)據(jù)庫字段datetime類型不允許插入空值,所以我把文件里面時間字段空值都替換成了None,然后就出現(xiàn)了插入數(shù)據(jù)庫性能下降的問題。
如果全部為str或者全部為None寫入性能沒有影響。
解決方案就是要么更改數(shù)據(jù)庫字段datetime類似為varchar,或者文件時間為空時給一個默認時間,不要替換為None。
最后測試寫入7600條數(shù)據(jù)到MySQL基本耗時在1-2s。
贊
0
賞