以下查询执行时间超过5秒(表包含1m +记录)。 外部查询没有使用正确的索引它总是通过使用FULL表scan获取数据。有人帮我如何优化它..
查询
SELECT x
FROM UserCardXref x
WHERE x.userCardXrefId IN(
SELECT MAX(y.userCardXrefId)
FROM UserCardXref y
WHERE y.usrId IN(1001,1002)
GROUP
BY y.usrId
HAVING COUNT(*) > 0
)
查询说明
查询统计信息
执行计划
答案 0 :(得分:0)
我会将查询重写为
select x.* from UserCardXref x
join (
select max(userCardXrefId),usrId from UserCardXref
where usrId in (1001,1002) group by usrId
)y on x.userCardXrefId = y.userCardXrefId
您需要的索引
alter table UserCardXref add index userCardXrefId_idx(userCardXrefId)
usrId
已根据解释计划编入索引,因此无需添加
你还有having count(*)>0
你已经在使用max()函数了,对于给定的组它永远不会有0行所以我已经删除了它。