数据库性能优化是 Web 开发中的重要话题。随着数据量的增长,不合理的数据库设计会严重影响应用性能。以下是一些实用的优化技巧:

1. 索引优化

索引是提高查询性能的最有效方法:

```sql
-- 为常用查询字段创建索引
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_post_created_at ON posts(created_at);

-- 复合索引
CREATE INDEX idx_post_author_status ON posts(author_id, status);

-- 唯一索引
CREATE UNIQUE INDEX idx_user_username ON users(username);
```

2. 查询优化

避免 N+1 查询问题:

```python
# 不好的做法
posts = Post.objects.all()
for post in posts:
print(post.category.name) # 每次都查询数据库

# 好的做法
posts = Post.objects.select_related('category').all()
for post in posts:
print(post.category.name) # 只查询一次数据库

# 对于多对多关系
posts = Post.objects.prefetch_related('tags').all()
```

3. 数据库设计优化

- 选择合适的数据类型
- 避免过度规范化
- 合理使用外键约束
- 考虑分区表(对于大表)

4. 缓存策略

```python
from django.core.cache import cache

def get_popular_posts():
cache_key = 'popular_posts'
posts = cache.get(cache_key)
if posts is None:
posts = Post.objects.filter(views__gt=100).order_by('-views')[:10]
cache.set(cache_key, posts, 300) # 缓存5分钟
return posts
```

5. 连接池配置

```python
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {
'MAX_CONNS': 20,
'MIN_CONNS': 5
}
}
}
```

6. 监控和分析

使用 Django Debug Toolbar 分析查询:
```python
# settings.py
if DEBUG:
INSTALLED_APPS += ['debug_toolbar']
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']
```

7. 定期维护

```sql
-- 分析表统计信息
ANALYZE table_name;

-- 重建索引
REINDEX INDEX index_name;

-- 清理无用数据
VACUUM table_name;
```

记住,优化是一个持续的过程。定期监控数据库性能,根据实际情况调整优化策略。过度优化也可能适得其反,要在性能和可维护性之间找到平衡。