Γεια σας,
Έχω μια βάση δεδομένων σε SQL Server CE 2.0, η οποία είναι αρκετά μεγάλη σε μέγεθος.
Ουσιαστικά, το πρόβλημα είναι ένας πίνακας, ο οποίος έχει περίπου 45000 εγγραφές.
Έστω ότι έχω δύο πεδία σε αυτόν τον πίνακα, το Code και Barcode (ναι, καλά καταλάβατε, πρόκειται για πίνακα ειδών εμπορικής διαχείρισης). Και τα δύο είναι τύπου nvarchar μήκους 20 χαρακτήρων.
Το Code περιέχει strings της μορφής xxxxx (5-ψήφιο αριθμητικό), ενώ το Barcode της μορφής yyyyyyyyyyyyy (13-ψηφία, αριθμητικό).
Το πρόβλημα με τον SQL Server CE είναι ότι δεν έχει τρόπους να περιορίσει τον αριθμό των εγγραφών που ο Query Compiler θα φέρει (π.χ LIMIT), οπότε αναγκαστικά χρησιμοποιώ την WHERE με "απόλυτες" αναζητήσεις (αποφεύγω δηλ. την LIKE, μιας που έχει ένα μικρό performance hit).
Παρατηρώ την εξής συμπεριφορά στα εξής δύο queries, τα οποία επιστρέφουν την ίδια εγγραφή, αλλά γίνεται αναζήτηση διαφορετικά:
SELECT Code,BarCode WHERE Code='12345' - Χρόνος εκτέλεσης: <1 sec
SELECT Code,BarCode WHERE BarCode='1234567890123' - Χρόνος εκτέλεσης: >25 sec
Δεν μπορώ να καταλάβω τι στραβό κάνω στη δεύτερη περίπτωση και έχω τέτοια διαφορά στην ταχύτητα εκτέλεσης.
Η σχέση Code και BarCode είναι 1:1 (όσον αφορά τα δεδομένα).
Oι δοκιμές γίνονται σε ένα WM2005 PPC με 64MB RAM και τη βάση αποθηκευμένη στην Storage Card.
Έχει κανείς καμιά ιδέα τι μπορεί να φταίει και πως μπορώ να ξεπεράσω το πρόβλημα;
Ευχαριστώ εκ των προτέρων.
Best Regards,
Manos S. Pappas
ClubPocketPC.gr - Mobile Development Admin