
全表扫描和加索引,是找同一行的两条路。这篇讲清数据库按页搬数据、索引是排好序的目录、以及为什么加了索引还要回表,于是你要问的是「翻了几页、回了几趟」。

| 你听到的 | 多半指什么 | 你接着问 |
|---|---|---|
| 在扫全表 | 没有目录可用,从头翻到尾 | 这张表多少页? |
| 建了个索引 | 按某个字段编了一本目录 | 建在哪几个字段上,谁在前? |
| 索引没走 | 条件跟目录对不上,或者查出来的行太多 | 这个字段是直接比,还是先算再比? |
| 回表 | 按目录找到位置,还得回主表搬一次 | 这个页面要显示哪几列? |
| 覆盖索引 | 要的列都在目录里,省掉回表 | 索引会不会因此变大、写入变慢? |
| 加索引会锁表 | 建目录期间写入要等 | 能不能边写边建,挑什么时候? |
| 执行计划 | 数据库把打算走的路写出来 | 加之前和加之后各给我一张 |
| 加了还是慢 | 回表太多、行数估偏,或者根本没用上 | 它现在走的是哪条路? |
postgresql.org
postgresql.org
postgresql.org
postgresql.org
postgresql.org
dev.mysql.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.