如何在SQL中加速LIKE操作(最好是Postgres)

时间:2009-10-08 21:25:34

标签: sql postgresql

我们有一个包含2百万条目的Postgres数据库。我们尝试过使用等式搜索,它可以立即工作(SELECT * FROM a WHERE b =“asd”)

但我们希望“LIKE'%asd%'”操作也快。我们怎么做?

5 个答案:

答案 0 :(得分:3)

通常喜欢'%something%'不可索引。

但是

有几个问题:

  1. 你绝对确定你需要完整的子串匹配吗?也许你可以用“任何单词(空格分隔)开头的东西”? - 它接近%%并且绝对可转换。
  2. 您可能希望使用全文搜索,但它们通常用于单词,因此如果您确实需要子字符串搜索,它甚至更不适用于您的解决方案。
  3. 你可以尝试使用三元组进行搜索(在contrib中使用模块pg_trgm)
  4. 您也可以尝试wildspeed,但请注意makes huge indexes

答案 1 :(得分:2)

答案 2 :(得分:1)

您无法按原样对其进行优化。

由于搜索的 front 处的通配符,因此需要扫描整个表以查找匹配项,这意味着它无法使用索引。

答案 3 :(得分:1)

您无法真正加快速度,因为该语法不允许使用索引。如果可能的话,你永远不应该使用通配符作为LIKE的第一部分。在不知道字段的第一个字符的情况下,无法使用索引,因此您会得到一个很慢的表扫描。

就个人而言,我从不让我的用户在不给我开始搜索的情况下进行搜索。在SQL Server中如果你必须这样做,你可以设置一个全文搜索,但我不知道Postgres是否有这个。

答案 4 :(得分:0)

使用某种“全文”搜索索引,例如PostGres看起来有一些support built in here