文章内容

2021/7/22 15:42:39,作 者: 黄兵

SQLAlchemy 设置多列复合索引

最近项目上线之后,有一个功能对数据库的数据查询非常慢,项目使用的是腾讯的数据库产品,腾讯云数据库控制台诊断优化提示了如何优化数据。

主要是给3列增加索引,按照提示修改数据库,直接使用SQL的方式增加索引。

但是项目使用的是SQLAlchemy 模型映射,对应的模型也需要增加索引,否则后面更改模型,一不小心会把索引给删除。

就像下面的语句:

op.drop_index('index_0', table_name='monitor')

为了确保模型与数据库一致,需要增加模型的索引。

这里是3个字段组成了一个复合索引,截图如下:

再SQLAlchemy创建索引代码如下:

# 云服务器提供商网络质量监控数据
class Monitor(db.Model):
__tablename__ = 'monitor'
id = db.Column(db.Integer, primary_key=True)
avg_time = db.Column(db.Float)
create_time = db.Column(db.DateTime(timezone=True), server_default=func.now(), index=True)
info_id = db.Column(db.Integer, db.ForeignKey('service_infos.id'))
server_id = db.Column(db.Integer, db.ForeignKey('server_list.id'),
doc='那个监控服务器发送过来的数据')
__table_args__ = (Index('index_0', info_id, server_id, create_time),)

这样就创建好了,再次migrate数据库,就不会出现删除索引的情况了。

注意:这里SQLAlchemy版本需要0.7以上。


参考资料:

1、Multiple columns index when using the declarative ORM extension of sqlalchemy


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - SQLAlchemy 设置多列复合索引

分享到:

发表评论

评论列表