索引、执行计划与查询优化
MySQL、SQLAlchemy 与数据库设计#Python全栈#第十四阶段#MySQL、SQLAlchemy 与数据库设计#索引、执行计划与查询优化约 728 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
索引为什么能减少部分查询的工作量?
追问 B+Tree 的有序性如何支持定位和范围读取?为何不能把数据库索引当作直接加载全部数据的 Python 字典?
InnoDB 聚簇索引与二级索引怎样组织数据?
追问 主键选择怎样影响二级索引大小和读取路径?通过二级索引找到主键后,何时仍需访问完整记录?
联合索引的列顺序应该依据什么选择?
追问
(tenant_id, status, created_at, id) 对筛选、排序和游标分页可能有什么帮助?为什么不能只按某个字段选择性最高就固定放第一列?联合索引的最左前缀怎样理解?
追问 等值、范围、索引条件下推和优化器的其他访问策略怎样影响使用?为什么不应把“范围后全部字段完全无用”当作绝对结论?
覆盖索引与回表有什么区别?
追问 查询只取索引中的字段时可能减少什么成本?为什么 SELECT * 可能改变可用方案?
函数、隐式类型转换与 LIKE 条件怎样影响索引访问?
追问 按日期筛选怎样改写为范围,前缀搜索与任意子串搜索怎样区分?如何通过计划确认,而不是仅凭表达式外观判断?
EXPLAIN 应重点观察哪些信息?
追问 访问方式、候选和实际索引、估算扫描量、过滤与额外操作怎样结合分析?为什么使用索引不等于查询就足够快?
EXPLAIN ANALYZE 与普通 EXPLAIN 有什么区别?
追问 实际执行、行数和循环信息怎样揭示估算偏差?在实验或线上使用前为什么必须考虑它真的会执行支持的语句?
索引为什么不是越多越好?
追问 写入、存储、缓存和维护成本怎样增加?低选择性、重复索引与查询覆盖不足如何评估?
深分页、排序和大结果集应该如何优化?
追问 游标分页、减少返回字段和合适索引各解决什么?改写前后如何对照数据分布、耗时和结果一致性?
核对资料: MySQL 8.4 索引优化。