小编Mik*_*ike的帖子

带有where子句和group by的SQL max()函数不能有效地使用索引

我有一个MYTABLE大约有25列的表,其中两列是USERID (integer)USERDATETIME (dateTime).

我在这两个列上有一个关于此表的索引,USERID后面是第一列USERDATETIME.

我想获得每个USERID的最大USERDATETIME.所以:

select USERID,MAX(USERDATETIME) 
from MYTABLE WHERE USERDATETIME < '2015-10-11'
GROUP BY USERID
Run Code Online (Sandbox Code Playgroud)

我希望优化器能够找到每个唯一的USERID和最大的USERDATETIME,其中搜索次数等于唯一USERIDs 的数量.而且我希望这是合理的.我在myTable中有2000个用户ID和600万行.但是,实际计划显示索引扫描中有600万行.如果我使用USERDATETIME/ 的索引USERID,计划将更改为使用索引搜索,但仍然是600万行.

为什么SQL不会以减少处理行数的方式使用索引?

sql sql-server indexing max

6
推荐指数
1
解决办法
307
查看次数

标签 统计

indexing ×1

max ×1

sql ×1

sql-server ×1