我们在 POSTGRES 上有以下查询
SELECT DISTINCT Doctor
FROM Table
WHERE (LOWER(Doctor) SIMILAR TO 'dr[.,][ !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'dr[., !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'dr[., !^] _ ab%'
OR LOWER(Doctor) SIMILAR TO 'mr[.,][ !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'mr[., !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'mr[., !^] _ ab%'
OR LOWER(Doctor) SIMILAR TO 'ms[.,][ !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'ms[., !^]ab%'
OR LOWER(Doctor) SIMILAR TO 'ms[., !^] _ ab%'
OR LOWER(Doctor) SIMILAR TO 'ab%')
Run Code Online (Sandbox Code Playgroud)
显然这是一个相当繁重的查询。我们在 Doctor 字段上有一个索引,但在大型数据集上这仍然需要 3-5 秒,这是一个问题(我们在搜索医生姓名时使用它来自动完成)。
有什么办法可以加快这个速度吗?
感谢您可以在此处使用单个不区分大小写的正则表达式模式:
SELECT DISTINCT Doctor
FROM yourTable
WHERE Doctor ~* '^((dr|mr|ms)(([\.,][\s!^])|[\.,\s!^])(\s.\s)?)?ab';
Run Code Online (Sandbox Code Playgroud)
这避免了必须进行如此多的正则表达式检查,并且还避免了将列小写的需要Doctor。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |