我使用的是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();
如有任何帮助,我们将不胜感激。谢谢
如果您有一个自动递增的id
列(您应该这样做),您可以按照它的降序进行排序,如下所示:->orderBy('id', 'desc')
。您还可以设置要获取的记录的限制。
更多信息请点击Laravel文档。
对我来说,你似乎需要优化你的数据结构,以满足你需要运行的查询。你有一个酒店名称列,它需要数据冗余。你们有预选的酒店吗?例如,在搜索时,在下拉列表中选择酒店并根据外键(hotels
表中的id
)而不是varchar(这要快得多)进行查询是否合理?
如果重新设计不是一种选择,您最好添加索引,正如您自己所说。但请记住,指数过多也是不好的做法。我不相信你可以强迫MySQL使用特定的策略来查询数据(例如,从最新的开始)。
这里的另一个问题是,即使你设法让MySQL首先查询最新的,它仍然希望搜索数据集的其余部分,以得出没有更多结果的结论(因为你没有限制)。