2018-10-31 16:19:33 1768次浏览 1条回答 0 悬赏 50 金钱

我在AR定义了关系:

public function getTest()
    return $this->hasOne(Tablea::class, ['id' => 'f_id', 'inuse_id' => 'use_id']);
}

查询的时候:$query->joinWith('test');

我查询20条数据,limit20.

最终查询是...FROM b LEFT JOIN tablea ON tablea.id=b.f_id AND tablea.inuse_id=b.use_id....

会有一条很耗时间的SQL执行:

SELECT * FROM tablea WHERE (id, inuse_id) IN ((6158269, 4936162), (6158333, 4936226))

怎么会有这样一条查询?我猜是getTest导致的,像我这种on有多个联合条件的要怎么写才不会有下面这个这么耗时的SQL产生?

  • 回答于 2018-11-01 10:46 举报

    有没有 用原生sql测试过? 可否对表结构优化? where子句的字段 最好是 有索引类型的可以加快查询效率,文档说明 使用主键来作为 WHERE 子句的条件查询是非常快速的 你的 hasOne 用2个字段 确定一个关系 一般不是应该一个字段的吗?@D96P(NXQ84Y8V7{Z3JPS5R.png 主外键的定义 你查查是什么东东

    1 条回复
    回复于 2018-12-05 15:50 回复

    你也知道是一般,有的时候还是就是需要多个条件的。
    这里说的hasOne,hasMany呢?

您需要登录后才可以回答。登录 | 立即注册
dyllen
经理

dyllen

注册时间:2014-09-09
最后登录:2020-10-16
在线时长:48小时47分
  • 粉丝8
  • 金钱400
  • 威望80
  • 积分1680

热门问题