为什么Django ORM比原生SQL慢得多

4 投票
1 回答
2859 浏览
提问于 2025-04-20 03:09

我有以下两段代码:

首先,是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 '>>>'

用第一种方法处理100,000条记录时,速度大约比第二种方法快4倍。为什么Django会慢这么多呢?

1 个回答

8

一般来说,ORM(对象关系映射)会为每一行数据创建一个完整的对象并返回给你。而你直接使用的原始SQL查询并不会这样做,所以它不会有这个额外的开销。如果你查询的数据量很大,并且不打算使用这些对象,那么直接使用原始SQL会更好。

撰写回答