MySQL优化详解
SQL语句优化
1. SELECT语句优化
- 避免SELECT *,只查询必要字段
- 使用EXPLAIN分析SQL执行计划
- 合理使用索引
- 优化子查询,尽可能使用JOIN
- 使用LIMIT限制结果集大小
2. ORDER BY优化
- 索引优化:
* 为ORDER BY字段创建索引
* 使用覆盖索引
* 确保索引字段顺序与ORDER BY一致
- WHERE + ORDER BY组合优化:
* 先进行WHERE过滤,减少排序数据量
* 使用索引进行排序
* 避免filesort
3. INSERT优化
- 批量插入替代单条插入
- 临时禁用索引
- 关闭唯一性检查
- 使用LOAD DATA INFILE批量导入
- 预处理语句批处理
4. UPDATE和DELETE优化
- 根据索引字段更新
- 批量更新替代循环单条更新
- 使用TRUNCATE替代DELETE FROM
- 合理使用事务
数据库结构优化
1. 表结构优化
- 选择合适的数据类型
- 使用UNSIGNED存储非负数
- 使用TIMESTAMP替代DATETIME
- 合理设计字段长度
- 适当冗余字段避免JOIN
2. 索引优化
- 主键使用自增ID
- 常用查询字段建立索引
- 避免索引过多
- 定期维护索引统计信息
- 删除无用索引
Django性能优化
查询优化
1. QuerySet优化
- 利用查询集缓存
- 使用select_related()和prefetch_related()减少查询
- 使用值查询(values()和values_list())
- 使用批量操作(bulk_create, bulk_update)
- 适当使用迭代器
2. 数据库操作优化
- 使用F()和Q()对象优化查询
- 合理使用filter和exclude
- 使用exists()替代count()和len()
- 使用update()替代save()
- 适当使用原生SQL
缓存优化
1. Redis缓存策略
- 缓存常用数据
- 使用缓存版本控制
- 设置合理的过期时间
- 实现缓存预热
- 防止缓存穿透和雪崩
2. 其他缓存优化
- 使用本地内存缓存
- 模板片段缓存
- 会话缓存
- 静态文件缓存
高并发处理
锁机制
1. 悲观锁
- 适用于并发量大的场景
- 实现方式:
* SELECT ... FOR UPDATE
* 表级锁
* 行级锁
2. 乐观锁
- 适用于并发冲突少的场景
- 实现方式:
* 版本号机制
* CAS算法
* 时间戳
秒杀系统设计
1. 架构设计
- 前端限流
- Redis缓存
- 消息队列
- 异步处理
- 分布式锁
2. 优化策略
- 系统预热
- 动静分离
- 库存预扣减
- 防刷限制
- 降级策略
Redis使用场景
数据类型应用
1. String
- 缓存对象
- 计数器
- 分布式锁
- 共享session
2. Hash
- 存储对象
- 购物车
- 用户信息
3. List
- 消息队列
- 最新N条数据
- 任务队列
4. Set
- 去重
- 好友关系
- 黑名单
5. Sorted Set
- 排行榜
- 权重排名
- 延时队列
高级特性应用
1. 事务
- MULTI/EXEC/WATCH
- 原子性操作
- 乐观锁实现
2. 发布订阅
- 消息通知
- 实时聊天
- 任务派发
3. 持久化
- RDB快照
- AOF日志
- 混合持久化
MySQL存储引擎
InnoDB
1. 特性
- 支持事务(ACID)
- 行级锁
- 外键约束
- MVCC多版本并发控制
- 聚集索引
2. 适用场景
- 需要事务支持
- 高并发系统
- 数据一致性要求高
MyISAM
1. 特性
- 表级锁
- 全文索引支持
- 压缩表支持
- 较高的查询性能
2. 适用场景
- 读密集型应用
- 无事务需求
- 低并发系统
Python2和3主要区别
1. 语法变化
- print函数化
- 字符串默认Unicode
- 除法运算符改变
- 异常语法改变
2. 标准库变化
- urllib重组
- queue替代Queue
- configparser替代ConfigParser
- pickle优化
3. 内置功能
- range替代xrange
- map/filter返回迭代器
- 字典视图对象
- 移除cmp函数