このクエリを最適化したい
**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**
しかし、私のロールテーブルにはすべてのユーザーに対して複数のエントリがあるため、上記のクエリでは重複したレコードが返されます。
SELECT( * ) FROM を SELECT COUNT(*) FROM に置き換えてカウントを見つけ、ページネーションのカウントを見つけてから、カウントクエリと結果クエリを実行する関数があるため、DISTINCTを使用できません
count と GROUP BY を一緒に使用すると、不適切な出力になることが既にわかっています。
今、私はクエリを最適化したいので、行数、つまりクエリの数を見つける必要があります。結果を見つけるためのより良い方法を教えてください。