php - Laravel 使用表中的索引键进行查询的最佳实践方法
问题描述
我有以下数据库表:
id - PK (Auto Increment)
hash - a unique index the value here is filled using the function "uniqid()"
title - string..
我想使用哈希值而不是 id 从表中查询。这种做法是否会加载服务器,因为我知道这是从数据库表中获取某些行的最佳方法,尤其是包含大量行的行是使用主键搜索的:
$row = Book::find(1);
或者我可以使用以下 eloquent builder 而不必担心对数据库服务器造成不必要的负载,因为他的哈希被设置为唯一键:
$row = Book::where('hash',$hashFromAPiRequest)->first();
有一个名为laravel Scout的包,我不确定我是否真的需要使用它。
解决方案
你不需要为此使用 Laravel Scout。一个简单的 where 条件就足够了。只要哈希列被索引,您的查询就不会加载服务器。
但是,由于您提到了不必要的负载,您仍然可以在此处使用select()进行一点优化。请仅使用您真正需要的那些列,否则您将发送/消耗额外的数据字节。
$row = Book::select('id', 'title')->where('hash',$hashFromAPiRequest)->first();
如果您想了解有关优化的更多信息,还可以查看Laravel 使用 mysql 索引。
推荐阅读
- javascript - 刷新后从本地存储中删除的项目仍然存在(vanilla JS)
- jquery - Jquery 不在 Firefox 中触发,但在 IE 和 Edge 中有效
- vba - 使用 VBA 恢复 JPG 文件中的元数据
- grpc-python - 如何在gRPC Python中实现消息接收的服务器端双向流超时?
- javascript - 根据取货和交付按钮显示或隐藏 WooCommerce 结帐字段
- c - 将两个整数输出为双精度数。C语言
- angular - 为什么调用 ReplaySubject.next() 不会导致订阅者接收新值?
- variables - awk:从输入文件中读取文件名、列分隔符和要省略的字段
- collections - 如何根据其中的消息对集合之间的 mpsc::Receivers 进行排序?
- python-3.x - 将函数动态添加到类并使其成为绑定方法