SQLite 里一个查询开始变慢,先别急着改 SQL,可以让它把执行计划打印出来:
EXPLAIN QUERY PLAN
SELECT id, created_at
FROM events
WHERE user_id = 42
ORDER BY created_at DESC;
看到 SCAN events 往往说明在扫全表;SEARCH ... USING INDEX 才是用了索引。加索引后要再看一次,ORDER BY 是否仍需临时排序也值得留意。
示例环境:SQLite 3.x,命令可在 sqlite3 CLI 或应用迁移脚本里执行;这是诊断语句,不会修改数据。