Johnnyxp64:Σωστο ειναι οτι μου λυνει το προβλημα χωρις να μου γεννα άλλα σε ευλογο χρονικο διαστημα.
Η μετατροπή σε varchar δημιουργεί άμεσα σοβαρότατο πρόβλημα καθώς αχρηστεύει οποιοδήποτε index υπάρχει στο date πεδίο. Αυτό κατ' επέκταση οδηγεί σε άλλα προβλήματα και όχι μόνο performance. Ο SQL Server θα αναγκαστεί να κάνει scan ολόκληρο τον πίνακα, να κλειδώσει ΟΛΕΣ τις εγγραφές όσο το κάνει αυτό, και να μπλοκάρει οποιοδήποτε άλλο query χρησιμοποιεί αυτό τον πίνακα. Το πρόβλημα θα γίνει ακόμα χειρότερο αν το query που περιλαμβάνει το conversion είναι περίπλοκο και αγγίζει πολλούς πίνακες, καθώς σε αυτή την περίπτωση θα κλειδωθούν πολύ περισσότεροι πίνακες.
Αν αυτό δεν είναι σοβαρό πρόβλημα .....
Όσον αφορά το παράδειγμα με τις 250.000 εγγραφές δεν ευσταθεί για πολλούς λόγους. Καταρχήν, η ταχύτητα ενός query όταν εκτελείται μόνο του, χωρίς κανένα άλλο transaction να δημιουργεί πιθανά locks είναι άνευ σημασίας. Η πραγματική επίδραση του φαίνεται όταν εκτελούνται ταυτόχρονα άλλα transactions, καθώς τότε θα φανεί αν καθυστερεί λόγω blocking και αν προκαλεί blocking σε άλλους.
Επιπλέον, η ταχύτητα με την οποία επιστρέφονται 1500 εγγραφές από τις 250000 πάλι δεν έχει σχέση. Ο SQL Server εκτελεί με διαφορετικό τρόπο τα queries όταν περιμένει ότι θα επιστρέψει πολλές και με διαφορετικό τρόπο όταν περιμένει ότι θα επιστρέψει λίγες εγγραφές. Αυτό το κάνει κοιτώντας τα στατιστικά των πεδίων και των πινάκων.
Σε τέτοιες περιπτώσεις, μπορεί να φανεί ότι το "κάτω από ένα δευτερόλεπτο" γίνεται, χωρίς υπερβολή, ώρες. Έχω αντιμετωπίσει δεκάδες περιπτώσεις εφαρμογών οι οποίες καθυστερούν για ώρες επειδή κάποιος προγραμματιστής κάρφωσε ένα conversion, δεν έβαλε index, ή χρησιμοποίησε κάποια άλλη "λύση που του έλυσε το πρόβλημα". Μπορεί ο προγραμματιστής αυτός να τέλειωσε στα γρήγορα, αλλά οι επιπτώσεις της "λύσης" του εξακολουθούσαν να προκαλούν προβλήματα (και σημαντικό κόστος στην εταιρεία και τους πελάτες) για πολύ καιρό μετά την αποχώρηση του προγραμματιστή από την εταιρεία.
Και όλα αυτά, επειδή κάποιος χρησιμοποιεί μία λύση της στιγμής, η οποία μάλιστα είναι και ελαφρώς πιο περίπλοκη από τη σωστή λύση ?
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos