SQLite 索引:什么时候该建,什么时候别建
索引不是越多越好。先看查询模式,再看写入成本,最后用 EXPLAIN 验证。
SQLite 索引:什么时候该...
先问三个问题
- 这个字段会出现在
WHERE/ORDER BY/JOIN里吗? - 查询的频率高吗?
- 写入的频率高吗?
如果前两个是“是”、第三个是“否”,才值得考虑建索引。
一个常见的误区
给每个字段都加索引,结果是:
- 写入变慢(每次插入都要维护索引)
- 磁盘占用变大
- 查询优化器反而可能选错索引
用 EXPLAIN 验证
EXPLAIN QUERY PLAN
SELECT * FROM blog_post
WHERE status = 'published' AND publish_at <= datetime('now')
ORDER BY pinned DESC, publish_at DESC;
如果出现 SCAN blog_post,说明在扫全表;出现 SEARCH ... USING INDEX,才真正用上了索引。
复合索引的顺序
(status, publish_at) 和 (publish_at, status) 不一样。把等值条件放在前面,范围条件放在后面,通常更有效。
索引是给查询用的,不是给字段用的。
评论
0 条还没有评论,来说点什么吧。