日期:2014-05-18  浏览次数:20564 次

如何优化 “select distinct, min(xxx) from 一张表”

数据量很大时候 下面这句话的查询效率很低(类别 和 tstId 都已建立索引)
select distinct 类别,min(tstId) id from 表 group by 类别;

如果优化这条语句呢? 我在想是否可以写成 inner join 然后select xxx from 表 a innerjoin 表 b 然后在找出来?

------解决方案--------------------
SQL code
select * from 表 a
 where not exists(select 1 from 表 where 类别=a.类别 and tstId<a.tstId)

------解决方案--------------------
SQL code
select * from 表 t where tstId=(select min(tstId) from 表 where 类别=t.类别)

------解决方案--------------------
既然是查询最大tstId 这个没重复吧? 应该不需要distinct咯

SQL code
select 类别,min(tstId) id from 表 group by 类别;

------解决方案--------------------
SQL code
select * from tb a where not exists(select 1 from tb where 类别=a.类别 and tstid<a.tstid)