django mysql内存泄漏_Django ORM性能优化,数据存取优化

Django ORM性能优化,数据存取优化

Web系统可以采用自底向上的顺序,从数据存储一直到数据展现,按照这个顺序一点一点查找性能问题。

数据库 (缺少索引/数据模型)

数据存储接口 (ORM/低效的查询)

展现/数据使用 (Views/报表等)

工具

解决问题的第一步是找到问题

运行Django看到原始SQL查询

确保Django DEBUG设置为True。然后,就这样做:

>>> from django.db import connection

>>> connection.queries

[]

>>> Author.objects.all()

]>

>>> connection.queries

[{u'time': u'0.002', u'sql': u'SELECT "library_author"."id", "library_author"."name" FROM "library_author" LIMIT 21'}]

connection.queries只有在调试为真时。它是一个按查询执行顺序排列的字典列表。每个词典都有以下内容:

``sql`` -- The raw SQL statement

``time`` -- How long the statement took to execute, in seconds.

connection.queries查询包括所有SQL语句——插入、更新、选择等。每次应用程序访问数据库时,查询都会被记录下来。

如果您使用多个数据库,您可以在connections字典的每个成员上使用相同的接口:

>>> from django.db import connections

>>> connections['my_db_alias'].queries

如果需要在函数的任意位置手动清除查询列表,只需调用reset_queries(),如下所示:

from django.db import reset_queries

reset_queries()

但是使用起来好像不是很方便。

django-exensions显示原始SQL

在shell命令行的环境下,可以使用 django-exensions的 shell_plus 命令并打开--print-sql 选项。

python manage.py shell_plus --print-sql

运行该shell后可以在命令行输入查询语句,会自动打印SQL内容。

>>> Author.objects.all()

SELECT "library_author"."id", "library_author"."name" FROM "library_author" LIMIT 21

Execution time: 0.001393s [Database: default]

]>

调试配置面板django-debug-toolbar

还有个更方便的方式, 使用 django-debug-toolbar 工具,就可以在web端查看SQL查询的详细统计结果,其实它功能远不止这个。

总结下3个方式

django.db.connection django自身提供,比较底层

django-extensions 可以在shell环境下方面调试

django-debug-toolbar 可以在web端直接看到debug结果

数据存取优化(官译)

Django的数据库层提供了多种方法来帮助开发人员最大限度地利用他们的数据库。本文收集了相关文档的链接,并添加了各种技巧,概述了优化数据库使用时要采取的步骤。

概述

找出你正在做的查询和它们的成本。使用QuerySet.explain()了解数据库如何执行特定的QuerySet。可能还希望使用外部项目,如django-debug-toolbar,或者直接监视数据库的工具。

根据需求,可能正在优化速度或内存,或者两者兼而有之。有时对其中一

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值