我有最简单的查询计数:
Client::where('active', 1)->count();
clients
表中只有20行,但查询需要1秒才能完成。我已经检查并用简单的PDO查询替换了这一行,它花费了很少的时间(约0.015秒)。
Eloquent通过相对简单的查询这么慢是否正常?有没有办法让它更有效率?我已经google了一下,但我能找到的所有信息都是为了优化大数据集的查询。
答案 0 :(得分:2)
尝试使用barryvdh/laravel-debugbar检查您的查询,并检查它是否真的很有说服力,这会减慢您的执行时间。
使用20个结果的简单查询花了这么长时间(你告诉过1s)是不可能的。
Eloquent并不是非常快,因为您使用Query Builder类来生成查询,然后在结果可用之后,它将为一组模型提供水合。
大部分时间Eloquent的缓慢原因是延迟加载的关系,自定义属性或变异器,例如:
您的主查询只有20行。但是在它之后,你正在调用一个并不急切加载的关系,它对主查询的每一行都有100个结果。这将是缓慢而低效的。
进行查询并附加到结果的自定义属性也会变慢。
如果没有看到一段代码,很难告诉你导致缓慢的原因是什么。告诉我,如果你提供一些功能样本,我可以尝试找到原因。
修改:我们的应用程序之一(纯html + laravel)只是FYI,会在 1秒< 1秒内呈现包含 500结果的列表页面/ strong>,并且不是简单的查询。查询计数为25,总查询时间为250毫秒,无缓存。