-- explain
select * FROM PNAS_MAT_PLM

force index(PNAS_MAT_PLM_UN)
where MAT_ID in (
select MAT_ID FROM PNAS_MAT_PLM where MAT_ID like '%12832788-00%'
and REMOVE_FLAG =0
)
and REMOVE_FLAG =0

 

1.如果想要左右like 可以使用  

select * FROM PNAS_MAT_PLM

where MAT_ID in (
select MAT_ID FROM PNAS_MAT_PLM where MAT_ID like '%12832788-00%'
)

可以先查询带有唯一key的数据,然后用in操作来查询数据

因为MAT_ID  有唯一索引,可以从索引的数据中先查询数据MAT_ID,而不是直接从整张表直接like查询数据。以达到优化sql的目的。

 

2.括号外加入了 新的and条件 导致速度变慢

select * FROM PNAS_MAT_PLM

force index(PNAS_MAT_PLM_UN)
where MAT_ID in (
select MAT_ID FROM PNAS_MAT_PLM where MAT_ID like '%12832788-00%'
)
and REMOVE_FLAG =0

因为mysql 处理条件时 会做一些选择先后,可能会导致先走and 后面的条件,这时候可以使用强制索引来优化sql

 

3.又在括号内加了and 条件然后查询速度又变快了,也没有强制使用索引,理解为括号里面有and 导致了mysql 选择了先查括号里面这个条件

select * FROM PNAS_MAT_PLM

where MAT_ID in (
select MAT_ID FROM PNAS_MAT_PLM where MAT_ID like '%12832788-00%'
and REMOVE_FLAG =0
)
and REMOVE_FLAG =0

 

posted on 2023-02-16 16:40  追疯筝的人  阅读(24)  评论(0)    收藏  举报