我正在使用Laravel Framework。我有成千上万的记录,每天都会添加新记录。我想要实现的是从最近插入的数据到旧数据库中搜索关键字数据库(这意味着,首先搜索最后插入的id和第二个插入的id,依此类推)。这可能是奇怪的,但我需要这个。这样做的主要目的是让我的搜索速度更快。我需要搜索匹配的多个关键字(大约5/6列)。根据我的知识,索引所有这些搜索列也是一种选择。如果有更好的解决方案,我想申请。我试过的发布代码会很棒,但我还没有尝试过。
这只是从表格的开头搜索
$checkDuplicate = \Guest::where('uuid', $uuid)
->where('first_name', 'abc')
->where('middle_name', 'def')
->where('last_name', 'ghi')
->where('age', '50')
->where('hotel_name', 'mno')
->where('check_in', 'xxx')
->where('check_out', 'yyy')
->first();
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
如果您有一个自动递增id
列(您应该这样做),您可以按降序排序,如下所示:->orderBy('id', 'desc')
。您还可以设置要获取的记录限制。
答案 1 :(得分:0)
对我而言,您似乎需要针对需要针对它运行的查询优化数据结构。您有一个酒店名称列,它要求数据冗余。您有预先选择的酒店范围吗?例如,在搜索时,在下拉列表中选择酒店并查询外键(id
表中的hotels
)而不是varchar(速度更快)是否合理?< / p>
如果重新设计不是一个选项,您可以通过添加索引来改善,正如您所说的那样。但请记住,太多的指数也是不好的做法。我不相信您可以强制MySQL使用特定策略查询数据(例如,从最新的开始)。
这里的另一个问题是,即使你确实设法让MySQL先查询最新的,它仍然想要搜索其余的数据集,得出结论没有更多的结果(因为你没有有限制。)