我正在尝试对我的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')
)
我得到了想要的结果,但是要花很多时间才能得到它。如何提高正则表达式查询的速度,或者是否有其他方法可以得到相同的结果?
答案 0 :(得分:1)
您可以使用iexact
并使用Q
组合查询:
object_db = Car.objects.filter(
brand__iexact="ford",
Q(car_model__iexact="focus-rs") | Q(car_model__iexact="focus_rs"))
这将区分大小写,并在car_model
字段上执行“ OR”查询。