项目场景:
在做一个几十万+的数据查询时,业务要求做一个最新条件筛选按钮,当点击按钮时只查询字段 国家,邮编,重量,码头为分组的不重复最新的数据。
问题描述:
SQL语句如下:
select id,country,code,weight,port_code,del_flag from XXX
where id in (
select Max() as id from XXX where
del_flag = ‘0’
group by
country,
code,
weight,
port_code
order by id
)
limit 20
其中where部分就是最新按钮的查询条件,当勾选时加上这个条件,不勾选时查询全部。ID为自增张主键。Long类型。
但是由于数据量太大,并没有在查询语句中使用到county,weight,code,port_code作为条件,导致以他们建立的索引未生效,又因为使用了IN,导致查询效率更慢了,尝试过更换IN为EXISTS,但是查询效率虽然快了,但是并不符合业务要求,没有将重复的且ID值小的部分剔除掉。
解决方案:
试了好几种方法都不行,希望论坛里有大神能给指导一下。