【发布时间】:2019-04-03 11:23:21
【问题描述】:
我正在尝试为我的 PostgreSQL 数据库创建正则表达式查询。我已经完成了,但问题是使用正则表达式的查询比我按名称搜索的查询慢 3 倍。有什么方法可以加速正则表达式查询或任何其他选项来更快地获得结果?我使用 django 创建对数据库的查询。
我按品牌和型号搜索汽车的“正常”查询:
object_db = Car.objects.filter(brand='Ford', car_model='Focus-RS')
我创建这样的正则表达式查询:
object_db = Car.objects.filter(brand__regex=r'^Ford$', car_model__regex='^Focus[-_]*RS$')
我的模特:
class Car(models.Model):
car_data = models.ForeginKey(CarData, on_delete=models.CASCADE)
brand = models.CharField(max_length=100)
car_model = models.CharField(max_length=100)
class Meta:
index_together = (
('brand', 'car_model')
)
我得到了我想要的结果,但是需要很长时间才能得到它。如何提高正则表达式查询的速度,或者有没有其他方法可以得到相同的结果?
【问题讨论】:
-
这些正则表达式的速度很快。如果您不满意,请切换到非正则表达式方法。
-
您是否将
brand和car_model一起编入索引? -
你这是什么意思? @dirkgroten
-
你也可以使用
icontains:Car.objects.filter(brand__icontains="Ford", car_model__icontains='Focus') -
是否有任何其他选项可以在不使用正则表达式的情况下获得相同的结果? @WiktorStribiżew
标签: python regex django postgresql