用REGEX运行MYSQL查询,我得到一个超时错误。
我有一个Bitnami NGINX WordPress堆栈上的AWS与Ubuntu 16.
使用MYSQL 8.0.16
我需要更改MYSQL(或其他任何地方)中的哪些设置才能阻止此错误?
感谢帮助..
我试着使用my.cnf文件并重新启动MYSQL,但我不知道是哪个超时设置,似乎有几个
这是SQL查询
REPLACE INTO wp_term_relationships (term_taxonomy_id, object_id) SELECT '272', ID
FROM `wp_posts`
WHERE (
post_title REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
OR post_content REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
)
AND post_type = 'post'
3699 -正则表达式匹配超时。
- 更新-不确定如何将图像添加到评论中,所以将在这里添加。
变量设置,@Rick James为如何列出它们欢呼
3条答案
按热度按时间2ledvvac1#
(see此处获取文档)
j8ag8udp2#
你应该把正则表达式变成一个trie。
这对引擎来说是更少的工作,它最多只需要执行16个步骤就可以失败
而不是现在的110步。
试试看
如果引擎不支持非捕获语法,请将
(?:
更改为(
。此外,如果您希望在压缩的
正则表达式。
https://regex101.com/r/iEzw33/1
扩大
让我们检查速度:
哇,每秒匹配一百万个单词!
ttvkxqim3#
“超时”可能是由于对大表的查询速度慢造成的,因此,让我们来讨论一下查询速度。
REPLACE is slow due to the
删除. And it will lose
term_order '(如果已经设置)。INSERT IGNORE
。OR
和REGEXP
,WHERE
子句需要扫描整个表,而FULLTEXT
索引可以避免这种情况;见下文。REGEXP
不会有多大帮助;改变到LIKE
可能较慢;等等。REGEXP
引擎内部,那么您可能需要一次运行几个城市的查询。FULLTEXT
将极大地提高速度,但是,如果您不想朝那个方向发展,那么次佳的方法是将REPLACE
更改为INSERT IGNORE
。FULLTEXT
方法是:(重音符号的处理可能会有问题,具体取决于MySQL的版本和使用的
ENGINE
。