Django 性能之数据库查询优化

本文主要提供了 Django 字段、查询方面的优化建议,同时还介绍了一个 Django-silk 性能分析工具。希望对你开发高性能的 Django 工程有所帮助。

1. DBA 的建议

1.1 表字段设计

  • 避免出现 null 值,null 值难以查询优化且占用额外的索引空间
  • 尽量使用 INT 而非 BIGINT,尽可能准确描述字段
  • 使用枚举或整数,替代字符串类型
  • 使用 TIMESTAMP 替代 DATETIME
  • 单表字段不要超过 20
  • 使用整型存储 IP

1.2 索引

  • 在 Where 和 Order By 操作上建立索引
  • 值分布稀少的字段不适合建立索引
  • 字符串最好不要作为主键
  • 在应用层保证 UNIQUE 特性

1.3 SQL 查询

  • 不要做列运算,可能导致表扫描
  • 避免 %xxx 式查询
  • 减少 JOIN 操作
  • 使用 LIMIT 拿取分页数据,而不要拿全部

2. Django Model 建议

  • http://python.jobbole.com/88971/
  • https://www.zhihu.com/question/19719997
  • https://docs.djangoproject.com/en/2.1/ref/models/querysets/