【问题标题】:Why is django ORM so much slower than raw SQL为什么 django ORM 比原始 SQL 慢得多
【发布时间】:2014-10-31 00:17:00
【问题描述】:

我有以下两段代码:

首先,在 SQL 中:

self.cursor.execute('SELECT apple_id FROM main_catalog WHERE apple_id=%s', apple_id)
if self.cursor.fetchone():
    print '##' 

接下来,在 Django 中:

if Catalog.objects.filter(apple_id=apple_id).exists():
    print '>>>'

在 100k 个条目的循环中,第一种方式比第二种方式快 4 倍。是什么导致 Django 这么慢?

【问题讨论】:

    标签: python mysql sql django query-optimization


    【解决方案1】:

    通常,ORM 会为每一行实例化一个完整的对象并返回它。您的原始 SQL 不会这样做,因此它不会受到惩罚。对于不打算使用对象的大型结果集,最好绕过 ORM。

    【讨论】:

    • ORM 是“对象关系映射”的首字母缩写。为每一行实例化一个完整的对象可能是“麻烦”,但这就是作为 ORM 的本质,另一个提问者进行了一些测试,并确定 Django 1.8+ 在性能上与原始 SQL 方式相比有了更大的改进做事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2020-10-21
    • 1970-01-01
    • 2017-12-26
    • 2011-01-25
    • 2012-12-20
    相关资源
    最近更新 更多