我们有一个包含2百万条目的Postgres数据库。我们尝试过使用等式搜索,它可以立即工作(SELECT * FROM a WHERE b =“asd”)
但我们希望“LIKE'%asd%'”操作也快。我们怎么做?
答案 0 :(得分:3)
通常喜欢'%something%'不可索引。
但是
有几个问题:
答案 1 :(得分:2)
答案 2 :(得分:1)
您无法按原样对其进行优化。
由于搜索的 front 处的通配符,因此需要扫描整个表以查找匹配项,这意味着它无法使用索引。
答案 3 :(得分:1)
您无法真正加快速度,因为该语法不允许使用索引。如果可能的话,你永远不应该使用通配符作为LIKE的第一部分。在不知道字段的第一个字符的情况下,无法使用索引,因此您会得到一个很慢的表扫描。
就个人而言,我从不让我的用户在不给我开始搜索的情况下进行搜索。在SQL Server中如果你必须这样做,你可以设置一个全文搜索,但我不知道Postgres是否有这个。
答案 4 :(得分:0)
使用某种“全文”搜索索引,例如PostGres看起来有一些support built in here。