文章内容
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 设置多列复合索引
评论列表