Django ORM 查询花费很长时间,但原始查询按预期运行

问题描述 投票:0回答:1

我有一个简单的获取查询

key = TenantKey.objects.get(pk=api_key)

当我运行负载测试时,对于许多请求,上述查询需要花费数秒(最多 15 秒),这非常奇怪。所以我运行了一个与上面的 ORM 等效的原始 sql 查询,如下所示

with connection.cursor() as cursor:
cursor.execute("SELECT app_tenantkey.key_id, app_tenantkey.name FROM app_tenantkey WHERE app_tenantkey.value=%s",[key])
row = cursor.fetchone()

令人惊讶的是,这个查询比 ORM 快得多,这正是我们所期望的,因为表非常小,包含大约 20 个条目。

我还附加了两个查询的最大持续时间仅供参考

Raw Query ORM Query

与类似情况下原始查询所花费的时间相比,ORM 查询花费的时间几乎是 100 倍。我想了解是什么导致 ORM 花费这么长时间而原始却很快。

python-3.x django django-models django-views django-orm
1个回答
0
投票

我想出了问题所在,结果发现问题不在于 django 的 ORM。真正的问题是数据库的 DNS 名称解析。此查询是对数据库的第一个查询,这就是为什么只有这一行花了几秒钟而其他查询按预期运行的原因。

© www.soinside.com 2019 - 2024. All rights reserved.