2017-07-21 6 views
0
SELECT Users.Id, 
     Users.IsActive, 
     Users.Risk, 
     Users.Name, 
     Users.EmployeeID, 
     Users.OrganizationId, 
     Users.Username, 
     Users.IsUser, 
     Users.WFID, 
     Organizations.Name AS orgName, 
     (SELECT MAX(UserTestGroups.ModifiedOn) 
     FROM UsersInSchedules 
     LEFT JOIN UserTestGroups ON UsersInSchedules.Id = UserTestGroups.UserInScheduleID 
     WHERE Users.Id = UsersInSchedules.UserID) AS LastTest 
FROM Users 
LEFT JOIN Organizations ON Users.OrganizationID = Organizations.Id 
WHERE Users.isUser = '0' 
     AND Users.IsDeleted = '0' 
ORDER BY Users.Name ASC 
OFFSET 15 ROWS FETCH NEXT 15 ROWS ONLY 

上記のクエリは、サーバーからの応答に時間がかかりすぎるほど遅いです。SQLフェッチクエリは、ローカルと紺野の両方のサーバーで低速に実行されます。

私はそれがなぜ起こっているのか理解していません。何が問題なのですか?ここで

は、クエリの実行計画である:

+0

あなたはいくつの行を持っていますか? PKのクラスタード・インデックスの横にあるインデックス?それは推定か実際の計画ですか?統計はどうですか? –

+0

実行計画をxmlとして共有し、テストデータを追加して、問題の詳細を確認してください。 – TheGameiswar

+0

デバッグヘルプを求める質問(「なぜこのコードは動作しませんか?」)には、必要な動作、特定の問題またはエラー、質問自体の中でそれを再現するのに必要な最短のコード。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – TheGameiswar

答えて

0

ネストされたSELECTは、クエリのパフォーマンスが低い理由である可能性があります。ネストされたSELECTは、外部クエリの結果ごとに処理する必要があります。私は、参加方法がより良い結果を生むことができると思います。あなたは試すことができる

SELECT Users.Id, 
     Users.IsActive, 
     Users.Risk, 
     Users.Name, 
     Users.EmployeeID, 
     Users.OrganizationId, 
     Users.Username, 
     Users.IsUser, 
     Users.WFID, 
     Organizations.Name AS orgName, 
     UserTest.LastTest 
FROM Users 
    LEFT JOIN Organizations ON Users.OrganizationID = Organizations.Id 
    LEFT JOIN 
     (
     SELECT UsersInSchedules.UserID, MAX(UserTestGroups.ModifiedOn) AS LastTest 
     FROM UsersInSchedules 
     LEFT JOIN UserTestGroups ON UsersInSchedules.Id = UserTestGroups.UserInScheduleID 
     GROUP BY UsersInSchedules.UserID 
     ) UserTest ON Users.Id = UserTest.UserID 
WHERE Users.isUser = '0' AND Users.IsDeleted = '0' 
ORDER BY Users.Name ASC 
OFFSET 15 ROWS FETCH NEXT 15 ROWS ONLY 
関連する問題