django - 相对于原始 SQL,Django 查询速度较慢
问题描述
我matches.query.__format__('')
用来打印 Django 查询将执行的原始 SQL。
如果我直接在psql
其中执行该查询需要 5-10 毫秒,而下面定时的 Django 查询在第一次执行时可能需要 100 毫秒。
丢失 100 毫秒是很多(必须运行第二个查询 - 所以这是 2 x 100 毫秒 - 增加延迟并且用户很容易注意到)。这是正常的吗?我错过了什么吗?
def api(request):
tag = request.GET.get('q', '')
matches = Relationship.objects.filter(keyword=tag, count__gte=3).order_by('-count')[:30]
print(matches.query.__format__('')) # get raw SQL query here
start_time = time.time()
print(matches) # lazy query executed here
print("Time elapsed {0:0.1f}ms".format((time.time() - start_time) * 1000))
mydict = serialize_matches(matches, tag)
return JsonResponse(mydict)
更新:
感谢以下提示。Django 看起来不错,毕竟是数据库慢。我的一些psql
查询非常快,因为结果已经被缓存了。即使psql
重新启动,似乎也有一些缓存,这可能会混淆性能测试。
解决方案
我发现 Django 很好,但我的数据库很慢。一些psql
查询之所以很快,只是因为结果被缓存了。请注意,即使psql
重新启动,似乎也有一些缓存。
因此,当您测试数据库的性能时,请确保查询没有被缓存。
最后没有必要使用原始 SQL 查询,因为 Django ORM 在性能方面看起来还不错。
推荐阅读
- django - Django 基于类的视图中的条件访问和直接用户
- flutter - 有没有办法解决我的 api 请求问题?
- python - Pygame 的大多数关键输入都不起作用,例如(w、a、s、d)。只有箭头键似乎在工作
- scala - 在 Spark 集群中分发 FlatMap
- python - 使用 OCR python 从屏幕读取文本
- c# - C# 字符串不替换制表符
- linux - 如何将压缩的 zip 目录拆分为单个文件?
- reactjs - 在 react.js 中访问实时 firebase 对象
- ruby - Selenium ChromeDriver 版本冲突
- html - Qualtrics - 冻结并排问题的第一列和第一行,以便使用 position -webkit-sticky 更好地滚动