我正在使用带有sqlalchemy的postgres数据库,我有以下命令,它从表中选择一组随机的X行。
random_set_of_Xrows = models.Table.query.filter(or_(*filters)).order_by(models.Table.random_value).limit(len(X)).all()
过滤器看起来像
[models.Table.primary_category_id == 1, models.Table.primary_category_id == 2]
和random_value是一个索引列,表中有一个随机数。 我发现如果我不包含filter语句,这个查询大约需要0.02秒,但是使用filter语句需要大约1秒。我有点惊讶这个过滤器语句太慢了,因为它只是一个整数比较。有没有办法优化这个?
表结构如下所示
class Table(db.Model):
id = db.Column(db.Integer, primary_key=True, index=True)
random_value = db.Column(db.Integer, index=True)
primary_category_id = db.Column(db.Integer, db.ForeignKey('category.category_id'))
class Query_Category(db.Model):
category_id = db.Column(db.Integer, primary_key=True)