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 搜索引擎。
我正在使用 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 搜索引擎。