Laravel 正则表达式性能改进查询

Laravel query with regexp performance improvement

我正在使用 laravel 5.3。 我有一个很大的 table(120 万行)。

有一个名为 comment 的文本列。 我写了这个查询 -

$regexp = 'good | bad | nice';

$temp1 = $connection->table('table1')
                ->select('*')
                ->where('comment', 'NOT REGEXP', $regexp)
                ->paginate(30);

$regexp 包含近 500 个单词。 因为这个 table 大小很大,所以查询需要更多的时间。 原因是首先对整个 table 应用过滤,然后对 30 行进行 returned。

有没有办法减少时间,只筛选 30 行和 return。

最大的性能消耗是您的正则表达式模式:~500 次交替很糟糕。 以下 post 将让您了解如何仅仅一个额外的交替就会导致巨大的 slow-down:

一般的建议是,将您的交替分解成更小的块并分别优化您的模式。

优化正则表达式模式的简单工具是 Perl 的 Regexp::Optimizer。但是,不要指望奇迹。手写图案要好得多。 提示:myregextester.com 允许您在线优化模式。

另一件需要考虑的事情是为您的搜索建立一个合适的索引。但是,我怀疑这会拯救你的蛋糕。正如建议的那样,您真正想要的是 full-text 搜索引擎。