Εκτελώ ένα 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 και αυτό φαίνεται ότι καθυστερεί πολύ τα πράγματα.
Οποιαδήποτε ιδέα/βοήθεια είναι ευπρόσδεκτη

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