我想优化这个查询
**SELECT * FROM Users WHERE Active = 1 AND UserId IN (SELECT UserId FROM Users_Roles WHERE RoleId IN (SELECT RoleId FROM Roles WHERE PermissionLevel >= 100)) ORDER BY LastName**
当我用下面的连接替换上面的查询时,执行时间变少了,
**SELECT u.* FROM Users u INNER JOIN Users_Roles ur ON (u.UserId = ur.UserId) INNER JOIN Roles r ON (r.RoleId = ur.RoleId) WHERE u.Active = 1 AND r.PermissionLevel > 100 GROUP BY u.UserId ORDER BY u.LastName**
但是上面的查询给出了重复的记录,因为我的角色表对每个用户都有多个条目。
我不能使用DISTINCT,因为有一个函数可以通过将 SELECT( * ) FROM 替换为 SELECT COUNT(*) FROM 来查找计数以查找分页计数,然后执行计数查询和结果查询
正如我们已经知道的那样,count & GROUP BY 一起使用会导致错误的输出。
现在我想优化查询并且必须找到行数,即查询的计数。请给出更好的方法找出结果。