Αυτό που ζητάς είναι υπερβολικά γενικό. Τί είδους queries κάνεις? Πόσο συχνά? Τί εννοείς ελαφρύτερη βάση? Καλύτερη τακτική από ποιά? Όσο για τις ζημιές και τα αρχεία, μάλλον πρέπει να εξηγήσεις τί εννοείς. Αν εννοείς ότι φοβάσαι ότι αν πάθουν κάτι τα αρχεία της βάσης, θα χάσεις δεδομένα, τί σε κάνει να πιστεύεις ότι με δικά σου αρχεία θα είσαι πιο ασφαλής? Μία βάση τουλάχιστον κάνει ένα αυτοέλεγχο.
Το μόνο που μπορεί κανείς να σου προτείνει είναι να φροντίσεις να ακολουθείς κάποιους βασικούς κανόνες.
- Να έχεις σωστά indexes. Η απόδοση των queries αυξάνεται κατακόρυφα αν υπάρχουν indexes στις στήλες που χρησιμοποιείς στα where και στα joins.
- Να μην χρησιμοποιείς cursor, ή επαναλαμβανόμενα queries μέσα σε loops (είναι σα να χρησιμοποιείς cursors). Έστω ότι διαβάζεις 100 εγγραφές από τη βάση και για κάθε μία από αυτές θέλεις να διαβάσεις κάποια άλλα δεδομένα από τη βάση. Αν κάνεις άλλα 2-3 queries για κάθε εγγραφή που διάβασες από τη βάση, θα καταλήξεις με 200-300 περιττά queries. Καλύτερα να κάνεις εκτελέσεις ένα query που θα επιστρέψει όλα τα δεδομένα που χρειάζεσαι.
- Να μην χρησιμοποιείς χύμα sql αλλά το λιγότερο parameterized queries. Όταν υποβάλεις ένα χύμα query σε μορφή string, η βάση πρέπει να το κάνει parse και να υπολογίσει τον καλύτερο τρόπο να το εκτελέσει. Αν αντί για χύμα queries χρησιμοποιήσεις parameterized queries ή ακόμα καλύτερα, stored procedures, η βάση θα κάνει parse το query μόνο την πρώτη φορά που θα το εκτελέσεις.
- Μην ανοίγεις παραπανήσια connections. Συνήθως δεν χρειάζεσαι παραπάνω από ένα connection για όλη την εφαρμογή. Μπορείς να πετύχεις να υπάρχει μόνο ένα connection ανοικτό κάθε φορά αν χρησιμοποιείς connection pooling, δημιουργείς ένα connection μόνο όταν χρειάζεται και το κλείνεις όταν δεν το χρειάζεσαι πλέον. Το connection pooling αναλαμβάνει να κρατήσει ανοικτό το connection και να στο επιστρέψει όταν το ξαναζητήσεις. Με τον τρόπο αυτό μπορείς να πετύχεις διπλάσιες επιδόσεις όταν εκτελείς συχνά μικρά queries.
- Μην επιστρέφεις παραπανήσια δεδομένα σε ένα query. Μπορεί το SELECT * FROM TABLE να βολεύει, έτσι όμως επιστρέφεις πολύ περισσότερα δεδομένα απ' όσα χρειάζεσαι.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos