SQLite 索引:什么时候该建,什么时候别建

索引不是越多越好。先看查询模式,再看写入成本,最后用 EXPLAIN 验证。

A
SQLite 索引:什么时候该...

先问三个问题

  1. 这个字段会出现在 WHERE / ORDER BY / JOIN 里吗?
  2. 查询的频率高吗?
  3. 写入的频率高吗?

如果前两个是“是”、第三个是“否”,才值得考虑建索引。

一个常见的误区

给每个字段都加索引,结果是:

  • 写入变慢(每次插入都要维护索引)
  • 磁盘占用变大
  • 查询优化器反而可能选错索引

用 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 条

还没有评论,来说点什么吧。

KEEP READING

相关文章

全部文章 →