18条优化Laravel 数据库查询的建议(16-18)
16. 从表中查询最新字段的最佳方法
通常查询最新字段,我们能会这么做
$posts = Post::latest()->get();
// or $posts = Post::orderBy('created_at', 'desc')->get();
以上方式会生成以下查询语句:
select * from posts order by created_at desc
这个查询基本上会基于created_at字段降序排列。由于created_at是字符串字段,通常以此排序会比较慢。
如果数据库表有自增主键,大部分情况下,最高的ID会是最新的记录。由于ID字段是整型字段又是主键,基于它排序会快许多。因此查询最新记录的最好办法如下:
$posts = Post::latest('id')->get();
// or $posts = Post::orderBy('id', 'desc')->get();
select * from posts order by id desc
17. 优化MySQL插入数据
目前为止,我们对使用select从数据库中查询数据进行了优化。大部分情况下,我们只优化读取查询。但是,有时候我们也会需要对insert和update查询进行优化。这里有一篇优化数据插入的有趣文章,有助于优化插入和更新较慢的情况。
18. 检查和优化查询
Laravel 中没有通用的优化方案。只有你清楚地了解你的应用在做什么,做了多少查询,以及这些查询有多少是实际使用的。因此检测你应用所做的查询才能帮你确定和减少查询总数。有一些特定的工具可以帮你检测每个页面的查询。
注: 不建议在生产环境中运行这些工具。在生产环境中运行会降低应用性能,未授权用户会获取敏感信息。
- Laravel Debugbar - Laravel debugbar 有一个标签页叫 database
会显示你访问页面时的所有查询,查看你应用中的所有页面,查询每个页面执行的SQL查询。 - Clockwork - Clockwork 和 laravel debugbar 相同. 不过相比于在你网站中注入工具栏,它将调试信息展示在开发者工具窗口或者通过访问 域名/clockwork 独立UI 。
- Laravel Telescope - Laravel telescope 是本地开发laravel应用很好的意义调试工具。安装完Telescope 后,你可以通过访问 域名/telescope 查看控制面板。在控制面板中,点击queries标签,会展示你应用中的执行的所有查询。