当对同一表和列使用多个whereHas()时(taggables.title)。执行时间增加40倍

时间:2019-07-10 08:31:38

标签: laravel eloquent

我正在使用whereHas()来匹配带有多个标签的餐厅菜肴。 虽然仅匹配一个标签,但效果很好,但是对于多个标签,执行时间会增加。 可能是什么原因?

我尝试了两种方法, 使用多个whereHas()

App\Dish
        ::whereHas('tags', function($q) {
                return $q->where('title','tag1');
        })
        ->whereHas('tags', function($q) {
                return $q->where('title','tag2');
        });

使用其中包含所有标签的标签

App\Dish
        ::whereHas('tags', function($q) {
                return $q->whereIn('title',['tag1','tag2']);
        },'=',2);

我已经尝试过索引标签表(tag_id和taggable_id)

1 个答案:

答案 0 :(得分:1)

这样做的原因是,未对taggables表字段(tag_id,taggable_id和taggable_type)进行索引