在 PostgreSQL 中使用 POSIX 正则表达式比使用 LIKE 和 ILIKE 有什么优势?
What is the advantage of using POSIX regular expressions than LIKE and ILIKE in PostgreSQL?
我正在构建 SQL 查询,我想知道使用 posix 正则表达式(例如 ~ , ~* , !~ , !~*
)或 LIKE
和 ILIKE
会如何影响这些查询的性能。使用其中任何一项会影响我的 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 子句更适用:
- 速度
- 简单子句查询
以下是 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。
我正在构建 SQL 查询,我想知道使用 posix 正则表达式(例如 ~ , ~* , !~ , !~*
)或 LIKE
和 ILIKE
会如何影响这些查询的性能。使用其中任何一项会影响我的 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 子句更适用:
- 速度
- 简单子句查询
以下是 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。