原生sql及sqlalchemy指定使用某个索引

有时候表查询时,里面不止一个索引,命中的索引不一定是最优的,因此我们需要指定索引。

一、原生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.

你可能感兴趣的:(python基础)