Python FastAPI 快速入门

admin
2025-11-23 05:21 阅读 1679
FastAPI框架开发高性能API的教程

MySQL 索引优化实战
索引是数据库性能优化的核心,正确使用索引可以让查询性能提升数十倍。
1. 索引类型
- B+Tree 索引 - 最常用,适合范围查询
- Hash 索引 - 只支持等值查询
- 全文索引 - 用于文本搜索
- 空间索引 - 用于地理数据
2. 创建索引
-- 单列索引
CREATE INDEX idx_name ON users(name);
– 复合索引
CREATE INDEX idx_name_age ON users(name, age);
– 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);
– 前缀索引
CREATE INDEX idx_title ON articles(title(20));
3. 最左前缀原则
-- 复合索引 (a, b, c)
-- 可以使用索引的查询:
WHERE a = 1
WHERE a = 1 AND b = 2
WHERE a = 1 AND b = 2 AND c = 3
– 无法使用索引:
WHERE b = 2
WHERE b = 2 AND c = 3
WHERE a = 1 AND c = 3 – 只能用到 a
4. EXPLAIN 分析
EXPLAIN SELECT * FROM users WHERE name = "John";
– 关键字段:
– type: 访问类型 (const > eq_ref > ref > range > ALL)
– key: 实际使用的索引
– rows: 扫描行数
– Extra: 额外信息
5. 索引失效场景
-- 函数操作导致失效
WHERE YEAR(create_time) = 2024 -- 失效
WHERE create_time BETWEEN ... AND ... -- 有效
– 隐式类型转换
WHERE phone = 13800138000 – phone 是 varchar,失效
WHERE phone = “13800138000” – 有效
– LIKE 前导通配符
WHERE name LIKE “%john” – 失效
WHERE name LIKE “john%” – 有效
– OR 连接非索引列
WHERE indexed_col = 1 OR non_indexed = 2 – 可能失效
6. 覆盖索引
-- 索引 (name, age)
-- 覆盖索引查询,无需回表
SELECT name, age FROM users WHERE name = "John";
– 需要回表获取其他字段
SELECT * FROM users WHERE name = “John”;
7. 索引优化建议
- 为 WHERE、ORDER BY、JOIN 的列创建索引
- 选择区分度高的列作为索引
- 避免过多索引,影响写入性能
- 定期分析慢查询日志
- 使用 pt-query-digest 分析查询
