有时候表查询时,里面不止一个索引,命中的索引不一定是最优的,因此我们需要指定索引。
一、原生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.