Page 1 of 1

query is very slow - sql server timeout

Posted: Wed Mar 03, 2010 5:10 pm
by madMax
Καλησπέρα,

Εκτελώ ένα view (vFinalScores) σε sql server 2005 και παίρνω το ακόλουθο error.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Ένα άλλο view (vScores) που καλείται από το vFinalScores είναι όντως αργό .
Ο κώδικας του vScores τερματίζει όταν δεν εκτελείται μέσα σε view.
Υπάρχει κάποια ρύθμιση για timeout μόνο στα views?

Το κυρίως πρόβλημα είναι η συνένωση τριών άλλων views (vScoresStage3, vScoresStage2, vScoresStage1) από το vScores , όπου και όλα έχουν τις ίδιες στήλες (PaperId, QuestionId, Point) , ιεραρχικά.
Δηλαδή:
όλα τα rows από το vScoresStage3
union
όλα τα rows από το vScoresStage2 τα οποία δεν περιέχονται στο vScoresStage3 (βάσει των στηλών PaperId, QuestionId)
union
όλα τα rows από το vScoresStage1 τα οποία δεν περιέχονται στο vScoresStage2 (βάσει των στηλών PaperId, QuestionId) και τα οποία δεν περιέχονται στο vScoresStage3 (βάσει των στηλών PaperId, QuestionId).
Τα views vScoresStage1,vScoresStage2,vScoresStage3 καλούν με τη σειρά τους ένα άλλο view οποίο καλεί μια απλή scalar-valued function και αυτό φαίνεται ότι καθυστερεί πολύ τα πράγματα.

Οποιαδήποτε ιδέα/βοήθεια είναι ευπρόσδεκτη :cool:

Code: Select all

/*  vScores  */

SELECT     *
FROM         (SELECT     v3.PaperId, v3.QuestionId, v3.Point
                       FROM          vScoresStage3 v3
                       UNION ALL
                       SELECT     v2.PaperId, v2.QuestionId, v2.Point
                       FROM         vScoresStage2 v2,
                                                 (SELECT     v2.PaperId, v2.QuestionId
                                                   FROM          vScoresStage2 v2
                                                   EXCEPT
                                                   SELECT     v3.PaperId, v3.QuestionId
                                                   FROM         vScoresStage3 v3) AS v2_tbl
                       WHERE     v2.PaperId = v2_tbl.PaperId AND v2.QuestionId = v2_tbl.QuestionId
                       UNION ALL
                       SELECT     v1.PaperId, v1.QuestionId, v1.Point
                       FROM         vScoresStage1 v1,
                                                 ((SELECT     v1.PaperId, v1.QuestionId
                                                     FROM         vScoresStage1 v1
                                                     EXCEPT
                                                     SELECT     v2.PaperId, v2.QuestionId
                                                     FROM         vScoresStage2 v2)
                                             EXCEPT
                                             SELECT     v3.PaperId, v3.QuestionId
                                             FROM         vScoresStage3 v3) AS v1_tbl
                       WHERE      v1.PaperId = v1_tbl.PaperId AND v1.QuestionId = v1_tbl.QuestionId) AS union_tbl