- 我有 4 个感兴趣的文本列。
- 每列最多约 100 个字符。
- 其中 3 列中的文本主要是拉丁词。(数据是生物目录,这些是事物的名称。)
- 数据目前约为 500 行。我预计这个数字不会超过 1000。
- 少数用户(10 岁以下)将拥有添加、更新和删除数据的编辑权限。我不希望这些用户给数据库带来沉重的负担。
因此,所有这些都表明需要考虑一个非常小的数据集。
我需要对所有 4 列执行搜索,其中至少 1 列包含搜索文本(不区分大小写)。查询将通过 Web 应用程序发出(并提供结果)。我对如何处理它有点迷茫。
PostgreSQL 提供了一些提高文本搜索速度的选项。我一直在考虑的 PostgreSQL 内置的可能选项是
- 根本不要尝试对此进行索引。只需使用
ILIKE
,LIKE
onlower
或类似的。(没有索引?) - 使用 pg_trgm 索引以提高搜索速度。我会假设我需要以某种方式索引连接。
- 全文搜索。我认为这也将涉及连接索引。
不幸的是,我并不真正熟悉其中任何一个的预期性能或好处和权衡,因此很难知道我应该首先尝试哪些事情以及我什至不应该考虑哪些事情。我读过的一些内容表明,对 2 和 3 进行索引非常慢,这与我将偶尔进行修改的事实相冲突。并且混合语言使全文搜索看起来没有吸引力,因为它似乎是基于语言的,除非它可以同时处理多种语言。我是否会期望对于这么小的数据,一个简单的ILIKE
或者一个LIKE
onlower
可能就足够快了?或者,对于这么小的数据修改的低负载,索引可能足够快?我会更好地寻找数据库之外的东西吗?
当然,我必须实际对所有这些进行基准测试才能真正确定什么是最快的,但不幸的是,我没有太多时间来做这个项目。那么这些方法的好处和权衡是什么?这些选项中有哪些不适合解决此类问题?还有哪些其他类型的解决方案(包括可能在数据库之外)值得考虑?
(我想我可能会发现一些关于 PG 中文本搜索的初学者教程很有用,但我的搜索大部分都是全文搜索,我什至不知道它是否对我有用。)
我在 PG 9.2.4 上,所以 9.3 之前的任何好东西都是一个选项。