[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"site-stats":4,"post-11":5},true,null,[6,28],{"locked":7,"post":8},false,{"id":9,"authorId":10,"categoryId":10,"tagId":11,"title":12,"tip":13,"coverUrl":14,"content":15,"videoUrl":4,"views":16,"likes":17,"isPublished":3,"isRecommended":7,"isPinned":7,"allowComment":3,"createdAt":18,"updatedAt":19,"deletedAt":4,"category":20,"tag":23,"author":25,"liked":7},11,1,3,"MySQL 索引与慢查询优化笔记","一次线上慢查询引发的索引复盘","https:\u002F\u002Fimg.sanshijiu.cn\u002Fpost\u002Fcover_03.jpg","## 事故现场\n\n一条列表查询在 200 万行的表上跑了 4 秒，EXPLAIN 一看，type 是 ALL，全表扫描。\n\n## 索引失效的常见场景\n\n1. 对索引列使用函数或运算\n2. 隐式类型转换（字符串列用数字查询）\n3. 前导模糊查询 LIKE '%xx'\n4. 联合索引不满足最左前缀\n\n## 排查三板斧\n\n```sql\nEXPLAIN SELECT ...;\nSHOW INDEX FROM t;\nSHOW PROFILES;\n```\n\n## 优化结果\n\n补上联合索引 (user_id, created_at)，把 SELECT * 改为按需取列，查询从 4s 降到 30ms。\n\n## 经验总结\n\n- 索引不是越多越好，写入代价真实存在\n- 上线前对核心链路做 EXPLAIN 应该成为习惯",77,27,"2026-07-12T07:33:20.000Z","2026-10-01T01:46:09.047Z",{"id":10,"name":21,"color":22},"后端",2,{"id":11,"name":24},"MySQL",{"id":10,"nickname":26,"avatarUrl":27},"叁拾玖","https:\u002F\u002Fimg.sanshijiu.cn\u002Favatar\u002F1\u002F1787397803188bebb136a.jpg",{"prev":29,"next":32},{"id":30,"title":31},10,"Node.js + Express 搭建 RESTful API 实战",{"id":33,"title":34},12,"Vue 3 Composition API 实践心得"]