从Hugging Face到本地项目:如何优雅地离线使用bert-base-chinese模型进行文本分类?
2026/6/4 2:36:59
好的,我们来详细分析如何通过EXPLAIN分析 SQL 语句的优劣:
使用 explain 关键字分析 sql 语句,根据执行结果动态调整 sql 语句。
EXPLAIN的作用EXPLAIN是 SQL 优化的重要工具,用于展示数据库执行查询时的执行计划。通过分析其输出结果,可判断:
执行计划中的以下字段需重点关注:
type(访问类型)表示表的访问方式,性能从优到劣排序:
| 类型 | 说明 |
|---|---|
system | 系统表,最优 |
const | 通过主键或唯一索引访问(如WHERE id = 1) |
eq_ref | 多表连接时使用唯一索引(如A.id = B.primary_key) |
ref | 使用非唯一索引(如WHERE index_col = value) |
range | 索引范围扫描(如BETWEEN,IN) |
index | 全索引扫描(遍历索引树) |
ALL | 全表扫描,需优化 |
👉优化建议:避免出现ALL,尽量提升至ref及以上。
key(实际使用的索引)NULL表示未使用索引possible_keys(可能使用的索引)可判断索引选择是否合理rows(扫描行数)Extra(附加信息)关键提示信息:
| 提示 | 说明 |
|---|---|
Using index | 使用覆盖索引,无需回表 |
Using where | 在存储引擎层后过滤数据 |
Using temporary | 创建临时表,需优化(如GROUP BY未走索引) |
Using filesort | 额外排序,需优化(如ORDER BY未走索引) |
Using join buffer | 使用连接缓存,可能需调整join_buffer_size |
SELECT * FROM orders WHERE user_id = 100 ORDER BY create_time;type: ALL key: NULL rows: 10000 Extra: Using filesort👉问题:全表扫描 + 额外排序,性能差。
(user_id, create_time))type: ref key: idx_user_create rows: 1 Extra: Using index👉优化效果:索引覆盖查询,避免回表与排序。
ALL访问类型WHERE、JOIN条件字段添加索引filesort和temporaryORDER BY/GROUP BY使用索引SELECT a,b→ 索引(a,b))rows数量WHERE YEAR(create_time)=2023)EXPLAIN:EXPLAIN SELECT ... FROM ... WHERE ...;type、key、rows、Extra通过持续分析EXPLAIN结果,可逐步提升 SQL 执行效率 🚀。