我需要什么索引来通过Laravel Eloquent提高mysql查询性能

我需要什么索引来通过Laravel Eloquent提高mysql查询性能,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有一个db增长很快的应用程序,目前有很多表的行数在70k左右,而且还在增加。我的查询是使用Laravel的Elount运行的,因此我了解其中的一些开销,但即使在mysqlworkbench中运行一个连接,也会导致我不得不停止查询,因为它需要花费多长时间 我正在使用的表: posts: id, session_id, cat_id, name, lat, long cats: id, session_id, name sessions: id, member_id, token, creat

我有一个db增长很快的应用程序,目前有很多表的行数在70k左右,而且还在增加。我的查询是使用Laravel的Elount运行的,因此我了解其中的一些开销,但即使在mysqlworkbench中运行一个连接,也会导致我不得不停止查询,因为它需要花费多长时间

我正在使用的表:

posts:
id, session_id, cat_id, name, lat, long

cats:
id, session_id, name

sessions:
id, member_id, token, created_at, updated_at

members:
id, memnum, email, name, state, postcode
每个
id
字段都有自己的主键索引,我的第一步是为每个FK添加索引,但令人惊讶的是,我没有看到任何好处

我还尝试添加复合索引,比如

create index `sid` on posts(`session_id`, `cat_id`);
这似乎也无济于事。为了测试这些性能差异,我运行了一个连接查询,该查询类似于eloquent使用
EXPLAIN
所做的操作:

explain select p.name, t.name, m.member_num from posts p, cats c, members m
left join sessions s on m.id = s.member_id
where p.created_at > date('2017-12-31');
在添加索引之前和添加索引之后,行数似乎根本没有从75k左右改变-如果索引有帮助,我希望这会显著减少?我做错了吗

如果有人认为雄辩的背景是可以确定的,那么以下是要求:

        $offers = Post::with(['session.member', 'cat'])
        ->where('created_at', '>=', $dates[0])
        ->where('created_at', '<', $dates[1])
        ->orderBy('created_at', 'desc')
        ->get();
$offers=Post::with(['session.member','cat'])
->其中('created_at','>=',$dates[0])

->其中,“'created_at',”您的数据库中有太多记录,因此您必须限制从eloquent获得的结果数量。您可以在
中使用闭包,并限制可能对您有帮助的记录数量

 $offers = Post::with(['session.member'=> function($query){
           return $query->take(10); // Limit the number of records
 }, 'cat'])
->where('created_at', '>=', $dates[0])
->where('created_at', '<', $dates[1])
->orderBy('created_at', 'desc')
->get();
$offers=Post::with(['session.member'=>函数($query){
return$query->take(10);//限制记录数
},“猫”])
->其中('created_at','>=',$dates[0])
->其中('created_at','