优化大文本上的PGSQL搜索查询('like',全文搜索,…)

优化大文本上的PGSQL搜索查询('like',全文搜索,…),sql,postgresql,sql-like,Sql,Postgresql,Sql Like,我们有一个软件解决方案,可供+200个客户使用。我们最近切换到pgsql,因为我们以前的数据库处理客户使用的搜索查询太慢 我们的数据库如下所示: 表A 1. ID (+ some other fields which aren't important here) 表B 此表用于存储表A中项目的“数据”。这对于每个客户都是不同的。例如,“Type”可以是“CLIENTNAME”,值可以是“AZERTY”。表A中的一条记录在表B中可以有无限多条记录。表A中的一条记录在表B中的记录通常在5到10条

我们有一个软件解决方案,可供+200个客户使用。我们最近切换到pgsql,因为我们以前的数据库处理客户使用的搜索查询太慢

我们的数据库如下所示:

表A

 1. ID
(+ some other fields which aren't important here)
表B

此表用于存储表A中项目的“数据”。这对于每个客户都是不同的。例如,“Type”可以是“CLIENTNAME”,值可以是“AZERTY”。表A中的一条记录在表B中可以有无限多条记录。表A中的一条记录在表B中的记录通常在5到10条之间

1. ID TABLE A
 2. TYPE
 3. VALUE
表C

 1. TABLE A ID
 2. VERSIONNR
 3. DESCRIPTION
此文件具有表A中记录的不同版本。每个版本都有扩展描述。这可以从0个字符到无限个字符

我们的问题是:我们的客户习惯于“谷歌式”搜索。例如:他们键入'AZERTY',我们显示表A中的所有记录,其中表A的ID为:

“AZERTY”在表C最新版本的说明中 “AZERTY”位于表B的一个值中 其他问题:此搜索是“包含”。如果他们搜索“ZER”,他们还应该找到包含“AZERTY”的记录。多个参数是“AND”,如果它们搜索“ZER 123”,我们需要显示描述与“ZER”和“123”匹配或值与“ZER”和“123”匹配的所有记录

我们迄今为止所做的工作:

有一个选项,用户可以签入/签出是否要搜索描述。我们建议他们只搜索值,并在需要时使用描述。 我们为一个搜索查询对数据库执行多个搜索线程,因为一次搜索所有文档会花费太多时间。 不久前,在我们以前的慢速数据库引擎上,我的一个同事制作了“搜索表”,基本上这是一个包含表ID上所有值的表,因此搜索时不需要SQL查询中的任何联接。看起来是这样的: 表D

表A ID 值此表A ID的表B中的所有值,用“”分隔 DESCRIPTION此表的最新版本的说明A ID 示例记录:

- 1
- ZER 123 CLIENT NAME NUMBER 7856 jsdfjklf 4556423
- DESCRIPTION CAN BE VERY LONG.
如果客户搜索“ZER 123”,则变为: 从表D中选择表A\U ID,其中的值为“%ZER%”和值为“%123%”

重要: 我们的一些客户在表A+5.000.000中有大量记录,这意味着在表B+/-50.000.000中有大量记录。我们的大多数客户在表A中有30万到50万条记录

我的问题是:

是否有比搜索表更好/更快的方法搜索所有值?如果没有搜索表,我将不得不为customer的搜索参数中的每个“”创建一个联接,我想这会太慢吗?如果他们在表A中有大量记录,例如:

从表A中选择ID 表_A.ID=Sub1.TABLE_A_ID和Sub1.VALUE上的内部联接表_B Sub1,如“%ZER%” 文件_A.ID=Sub2.TABLE_A_ID和Sub2.VALUE上的内部联接表_B Sub2,如“%123%”

我看了一下PGSQL中的全文搜索。我认为我不能使用它,因为你不能像like='contains'那样使用它

是否有任何索引可用于值文件B或搜索文件和描述文件C或搜索文件,以加快搜索速度?我已经读过了,但我认为没有,因为在使用“%ZER%”之类的搜索时不使用索引? 我希望我已经解释清楚了。
提前谢谢

您的术语令人困惑,但我认为您在编写文件时指的是表

您不能用一个查询合理地搜索多个表,但可以同时搜索单个表的多个列


根据您的描述,我想说您需要一个关于表中相关字符串列串联的详细信息。

谢谢您的回答!我对文件/表格的问题做了一些修改。我来看看三角图索引。关于搜索像描述这样的大文本有什么想法吗?如果你想要子字符串搜索而不仅仅是前缀搜索,哪种全文搜索可以呢?like是你最好的选择。