优化postgres在django中为CHAR字段包含(LIKE)查询

时间:2017-06-05 06:04:49

标签: python django postgresql

所以我在我的Django(postgres)后端查询了一个搜索端点,如下所示:

widgets = Widgets.objects.\
    filter(user=request.user).\
    filter(title__icontains="marketing director").\
    distinct('url')[:250]

title是一个CHAR字段(django中为models.CharField(max_length=255, blank=True))。

contains这里当然相当于Postgres中的'%LIKE%'查询。我特别想要这个(即:不是中缀'LIKE%'搜索)。

我想加快查询速度。

似乎对postgres文本搜索的大多数优化仅适用于TEXT字段 - 有没有办法加快CHAR列上的精确字符串搜索?

我可以使用Postgres trigram索引,但实际上并不需要模糊/拼写错误类型的搜索。虽然我很乐意使用它,但实际上由于某种原因它实际上更快。

或者我会更好地将这些列转换为TEXT,使存储增加点击,并以某种方式更好地索引它们?

1 个答案:

答案 0 :(得分:2)

方式使用带有LIKE模式的索引,该模式以%开头(未锚定开头)是使用三元组索引。

将属性定义为charactertext并不重要,因为无论如何它们都会转换为text

您的数据是否包含大量尾随空白?除此之外,我看不出text如何浪费存储空间。