优化大文本上的PGSQL搜索查询('like',全文搜索,…)
我们有一个软件解决方案,可供+200个客户使用。我们最近切换到pgsql,因为我们以前的数据库处理客户使用的搜索查询太慢 我们的数据库如下所示: 表A优化大文本上的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条
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是你最好的选择。