数据库优化(Django Mysql)--示例

本文介绍了针对Django应用中MySQL数据库的优化方法,包括使用django的shell和调试工具查看SQL,添加索引,选择合适字段类型,利用缓存,理解并优化QuerySet的使用,减少不必要的查询,以及批量操作。还提到了实际案例中的索引冲突问题及解决办法,以及如何配置MySQL日志。
摘要由CSDN通过智能技术生成

数据库优化–示例

1.背景

​ 通过监控软件可以明确的定位某个HTTP协议的API的响应时间在2-3秒(一般HTTP协议的API要控制在200ms以内),显然需要优化。

​ 服务是一个djnago后台服务,采用原生ORM框架。

​ 另外,该API内部业务逻辑并不复杂,主要是做了MySQL数据库I/O的全量查询。且查询中有很多级联查询。

2.说明

​ 一个HTTP响应的优化可以从很多层面去做,这里单纯从业务代码和SQL语句的角度去优化。

3.分析

  • 实际工作场景,监控到API响应慢一般是由运维等其他人员提出,作为开发人员需要用开发场景下的工具来进行复测和验证。
  • django中数据库性能分析工具很多,常见如(下列同一个组织出品):
    • django-debug-toolbargithub
      • 场景:开发测试阶段
      • 限制:Debug=True 才加载该模块和URL地址。
    • silkgithub
      • 场景:开发测试阶段;服务交互和用户使用后分析;封装性更好一点。
      • 限制:需要使用数据库,数据库迁移
  • 采用silk
  • 可以直接通过上述工具,清晰查看request/responseSQL 耗时情况,以及详细的函数调用堆栈和数据库查询语句。

4.调优思路

  • 减少外部I/O
  • 减少冗余调用
  • 优化耗时逻辑

5.数据库优化的方式 – django ORM

0. 性能调优工具

1.django的shell (Debug=True), 查看django执行的原生SQL语句
>>> from django.db import connection
>>> connection.queries
2.explain()查看某个语句执行情况
>>> Blog.objects.filter(title='My Blog').explain()
3.借助三方工具
  • django-debug-toolbar
  • silk

1.标准的数据库优化技术

1.1 添加必要的索引
1.数据库优化,首先可选索引;使用 Meta.indexesField.db_index 不同级别的设置
2.在频繁进行下列查询方式的操作上添加
  • filter
  • exclude
  • order_by
1.2 使用合适的字段类型
1.3 缓存技术

下面是针对django的ORM来谈

2.理解QuerySet

2.1 理解 QuerySet 赋值
1.惰性查询
  • 创建、生成QuerySet 对象时,不会发生数据库查询;
  • 只有需要 “输出”结果的时候才会发生数据库查询;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值