オリジナルsqlおよびsqlalchemyインデックスの使用を指定

799 ワード

テーブル・クエリーでは、インデックスが1つだけではない場合があります.ヒットしたインデックスは必ずしも最適ではありません.そのため、インデックスを指定する必要があります.
一、原生sql
--       
select * from order where price>20 and create_time>current_date order by id desc;

--           ,  describe     sql  ,         ,       。
--      force index()

select * from order force index(create_time) where price>20 and create_time>current_date order by id desc;

二、sqlalchemy
sqlalchemyはwith_を提供していますhint()メソッド.
obj_query = db.session.query(Picture, Label.name).join(Label, Picture.label_id == Label.id
).with_hint(Picture, 'force index(create_time)', 'mysql').filter(Picture.port == port
).order_by(Picture.create_time.desc()).offset(offset).limit(limit).all()

インデックスを無効にする場合はforceをignoreに置き換えます.