mysql按相反顺序搜索



我使用的是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首先查询最新的,它仍然希望搜索数据集的其余部分,以得出没有更多结果的结论(因为你没有限制)。

最新更新