gpt4 book ai didi

sql - Django 中的第一个查询总是很慢

转载 作者:行者123 更新时间:2023-12-04 17:35:18 28 4
gpt4 key购买 nike

我有一个简单的 Django 应用程序,只有两个模型和一个 View 。每当我查询数据库时,第一个查询总是需要大约一秒钟,之后的任何查询几乎都是瞬时的。

我的观点是这样的:

def my_view(request):
start = time.time()
print('0', time.time() - start)

a = TestClass.objects.get(name="test")
print('1', time.time() - start)

b = TestCustomer.objects.get(name="test")
print('2', time.time() - start)

return render(request, 'test.html', {})

当我运行它时,我得到以下输出:

0 0.0
1 1.0049302577972412
2 1.0059285163879395

这意味着第一个查询比第二个查询慢得多。

如果我注释掉第一个查询(TestClass 查询),我会得到以下输出:

0 0.0
1 0.0
2 1.0183587074279785

这意味着 TestCustomer 查询突然变慢了很多。两种模型都只有一个字段(name,这是一个 CharField)。

为什么第一个查询总是那么慢?我试过禁用调试,但这没有区别。如果我绕过 Django 直接运行查询,它们是即时的:

SELECT  `customers_testcustomer`.`id`, 
`customers_testcustomer`.`name`
FROM `customers_testcustomer`
WHERE `customers_testcustomer`.`name` = 'test';

/* Affected rows: 0 Found rows: 1 Warnings: 0 Duration for 1 query: 0,000 sec. */

最佳答案

根据设置,与数据库的连接可能会在请求完成后关闭。 CONN_MAX_AGE时就是这种情况设置为 0。因此,对于每个请求,都必须建立一个新的连接。

例如,您可以将 CONN_MAX_AGE 设置为 60,这样您就可以重用之前请求打开的连接,从而避免这种开销。您的服务器的第一个查询可能仍然有点慢,但后续请求中的查询通常会更快。

关于sql - Django 中的第一个查询总是很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56930408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com