数据库 has_one 的一个优化问题

kingwkb · 2017年04月27日 · 最后由 easonlovewan 回复于 2017年04月29日 · 5962 次阅读

目前遇到瓶颈,一个 sql 要 20s 左右 表结构是这样的

A
  id

B
  id
  a_id

现在要查询 A 表有,但是 B 表没有的情况,查询如下

select id from A left join B on A.id=B.a_id where B.id is null

A 表的数据量在 200W+,现在迷茫不知道怎么优化才好

  1. B.a_id 没索引吧?
  2. has_one 我记得查询是没有 join 的呀?
  3. 别用 A, B 这种东西来问问题,说详细场景,拿出关键部分代码实现,你的问题也有可能是别的导致的

没有分页吗?分页条件有没索引?外键有没索引?

能否换成 B.has_one A, dependent: :nullify?然后只查 A.b_id is null,无需 join

B.a_id 存在但是 B.id == null? 不觉得这个有问题?

单从你这条 sql 来分析 null 会影响索引的效率,会认为是同一个值

kingwkb 关闭了讨论。 05月07日 07:49
需要 登录 后方可回复, 如果你还没有账号请 注册新账号