mysql从逆序搜索

时间:2016-07-26 06:31:11

标签: php laravel search eloquent

我正在使用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();

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

如果您有一个自动递增id列(您应该这样做),您可以按降序排序,如下所示:->orderBy('id', 'desc')。您还可以设置要获取的记录限制。

More info here in Laravel Docs

答案 1 :(得分:0)

对我而言,您似乎需要针对需要针对它运行的查询优化数据结构。您有一个酒店名称列,它要求数据冗余。您有预先选择的酒店范围吗?例如,在搜索时,在下拉列表中选择酒店并查询外键(id表中的hotels)而不是varchar(速度更快)是否合理?< / p>

如果重新设计不是一个选项,您可以通过添加索引来改善,正如您所说的那样。但请记住,太多的指数也是不好的做法。我不相信您可以强制MySQL使用特定策略查询数据(例如,从最新的开始)。

这里的另一个问题是,即使你确实设法让MySQL先查询最新的,它仍然想要搜索其余的数据集,得出结论没有更多的结果(因为你没有有限制。)