querysetでbulk_create()とcreate()のパフォーマンス比較

2021年9月11日

今回はDjangoのquerysetでbulk_create()とcreate()のパフォーマンスを比較した結果について書きたいと思います。



querysetでbulk_create()とcreate()のパフォーマンス比較

当たり前ですが、create()よりもbulk_create()の方がパフォーマンスが良いです。
今回はどれくらいcreate()よりもbulk_create()の方がパフォーマンスが良いのか調査します。

パフォーマンス調査に当たって使用したmodelは次のBookモデルです。

パフォーマンスの調査に当たっては次のソースを準備しました。

titleやauthor、priceをすべて空で登録します。
それぞれcreate_test()はcreateを使って10000個のBookオブジェクトを作る関数、bulk_create_test()はbulk_createを使って10000個のBookオブジェクトを作る関数です。

create_test()とbulk_create_test()についてそれぞれ三回ずつ実行してみます。
初期条件として、Bookオブジェクトは一つもない状態でそれぞれ実行します。

createを使って10000個のBookオブジェクトを作る関数であるcreate_test()を三回実行した結果は次のとおりです。

一方、bulk_createを使って10000個のBookオブジェクトを作る関数であるbulk_create_test()を三回実行した結果は次のとおりです。

圧倒的と言えるほど、createよりもbulk_createの方がパフォーマンスが良いです。
その差はなんと60倍ほどでしょうか。

bulk_createが使えるのはDjangoのバージョンが1.4からですが、複数のオブジェクトを作成したい場合はcreateよりもbulk_createを使用した方が良いでしょう。

終わりに

今回はDjangoのquerysetでbulk_create()とcreate()のパフォーマンスを比較した結果について書きました。

PythonやPythonを使ったライブラリやフレームワークのパフォーマンスの調査に興味があり、様々なコーディング方法の違いによる最適化の調査を行っております。
リストにまとめてあるので、よろしければ覗いてみてください。
Pythonとそのライブラリやフレームワークのパフォーマンス調査結果リスト

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Django

Posted by ちこ