在 PostgreSQL 中使用 POSIX 正则表达式比使用 LIKE 和 ILIKE 有什么优势?

What is the advantage of using POSIX regular expressions than LIKE and ILIKE in PostgreSQL?

我正在构建 SQL 查询,我想知道使用 posix 正则表达式(例如 ~ , ~* , !~ , !~*)或 LIKEILIKE 会如何影响这些查询的性能。使用其中任何一项会影响我的 SQL 查询的速度和性能吗?如果是,如何?而哪个更适合使用呢?

regex/like 运算符要求在数据库中发生某些事情,因此它们当然会以某种方式影响性能……但它们都完成特定的工作。

LIKE provides a simple syntax, but not much functionality. According to LIKE 功能非常专业,因此与等效的正则表达式相比,性能可能更高。

which is more applicable to use?

并非所有文本都可以由 LIKE 匹配,因此在这些情况下,您必须使用正则表达式。但是,如果 LIKE 就足够了,链接的答案表明最好使用它。

如果您关心特定查询,请使用 postgres 的 EXPLAIN ANALYZE 查看 postgres 实际要做什么。

根据我的研究, POSIX 由于一些优点,正则表达式比使用 LIKE 和 ILIKE 子句更适用:

  1. 速度
  2. 简单子句查询

以下是 posix 正则表达式用法的一些示例:

~ 区分大小写的波浪号

POSIX: SELECT record FROM mytable WHERE record ~ 'a';
LIKEi: SELECT record FROM mytable WHERE record like '%a%'; 

~* 不区分大小写

POSIX: SELECT record FROM mytable WHERE record ~* 'a';
LIKEi: SELECT record FROM mytable WHERE record ilike '%A%';

!~ exclude/not (区分大小写)

POSIX: SELECT record FROM mytable WHERE record !~ 'a';
LIKEi: SELECT record FROM mytable WHERE record not like '%a%';

!~* exclude/not(不区分大小写)

POSIX: SELECT record FROM mytable WHERE record !~ 'a';
LIKEi: SELECT record FROM mytable WHERE record not ilike '%a%';

可以找到 posix 正则表达式、LIKE 和 ILIKE 的一些其他用法 here