querysetでlen()よりcount()の方が圧倒的にパフォーマンスが良いから使うべき

今回はDjangoのquerysetでlen()よりcount()の方がパフォーマンスが圧倒的に良いからcount()を使うべきということについてお話しさせていただきます。



querysetでlen()よりcount()の方が圧倒的にパフォーマンスが良いから使うべき

まず結論として、querysetの数を調べるためにlen()よりcount()を使った方が圧倒的に早いです。

調査に当たって次のソースを準備しました。

軽くこれらのソースについて説明すると、len_test()がlen()を使ってquerysetの数を数えてタイムを計る関数、count_test()がcount()を使ってquerysetの数を数えてタイムを計る関数です。

次のBookモデルについて調査をします。

title、author、priceが空のBookオブジェクトを1000万個準備しました。
querysetでlen()よりcount()の方が圧倒的にパフォーマンスが良いから使うべき

この1000万個のBookオブジェクトについて、len()とcount()を使ってquerysetの総数を数える時、それぞれどの程度の時間を必要とするのか調べます。

まず、len()を使ってquerysetの数を数えるlen_test()を三回実行した結果は次の通りです。

およそ1分半もタイムがかかっております。

一方count()を使ってquerysetの数を数えるcount_test()を使った場合はどうでしょうか。
count_test()を三回実行してタイムを計測した結果は次のようになりました。

len()を使った場合と比べ物にならないほど圧倒的なスピードで処理が終わります。

querysetの総数を調べたいときは、len()よりもcount()を使用するようにしましょう。

終わりに

今回はDjangoのquerysetでlen()よりcount()の方がパフォーマンスが圧倒的に良いからcount()を使うべきということについてお話しいたしました。

【お知らせ】
プログラミングのコンサルタントをすることを考えております。
下記の通り、かなり格安でご用意させていただいております。
【格安】プログラミングコンサル生募集(初心者向け、フリーランス志望向け)

詳しくは下記のリンクをご覧ください。
https://chico-shikaku.com/2020/10/programming-consult-2020/

11月くらいを目処に開始予定です。
最初は募集があれば先着5名くらいを目安に考えております。
質問や意見、問い合わせやお申し込みは下記のリンクよりお願いいたします。
https://docs.google.com/forms/d/e/1FAIpQLSeTXskmlyPAHuhwiOE9togqJPWdhXYCyRoVnFkkbS0VN0Ftug/viewform?usp=sf_link

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






Django

Posted by ちこ