SQL: Ποια είναι η διαφορά ανάμεσα σε ένα πίνακα temp και ένα υποσύστημα;


Απάντηση 1:

Ένας προσωρινός πίνακας είναι η φυσική αποθήκευση, στη μνήμη και στο δίσκο. Ένα ερώτημα είναι ένα ερώτημα. Αυτή είναι η διαφορά. Σε μια διαδικασία παρτίδας, ένας προσωρινός πίνακας, λόγω της φυσικής του φύσης, μπορεί να αναφερθεί πολλές φορές μέσα στην παρτίδα. Ένα δευτερεύον ερώτημα μπορεί να αναφέρεται μόνο στο ερώτημα του. Σίγουρα, μπορείτε να το γράψετε πολλές φορές, αλλά πρέπει να επιλυθεί κάθε φορά που γράφεται. Ενώ ο προσωρινός πίνακας είναι αποθηκευτικός χώρος, έτσι δεν ανασυντίθεται κάθε φορά που το αναφέρετε.

Ζητήθηκε να απαντήσει.


Απάντηση 2:

Ένας πίνακας temp είναι ένας πίνακας που βασίζεται στην τρέχουσα περίοδο λειτουργίας στη μνήμη (προσωρινή). Μετά την περίοδο λειτουργίας, ο πίνακας temp απομακρύνεται, παρόμοια με μια κοινή έκφραση πίνακα (CTE) που χρησιμοποιείται για την παραγωγή αποτελεσμάτων εντός μνήμης (όχι μόνιμα).

Σκεφτείτε ένα δευτερεύον ερώτημα ως δύο ερωτήματα που έχουν συγκεντρωθεί για να παράγουν αποτελέσματα. Τα δευτερεύοντα ερωτήματα έχουν δύο διαφορετικά είδη, ένα συσχετιζόμενο υπο-ερώτημα όπου το εξωτερικό ερώτημα εξαρτάται από το εσωτερικό ερώτημα και από ένα μη συσχετισμένο δευτερεύον ερώτημα που μπορεί να εκτελεστεί σε αμφότερα τα μέρη ή και στα δύο μέρη του δευτερεύοντος ερωτήματος. Ανάλογα με το πού βρίσκεται το δεύτερο μέρος του δευτερεύοντος ερωτήματος στη ρήτρα, βασίζεται στα αποτελέσματα παραγωγής.

Σημειώστε ότι η ρήτρα SELECT μπορεί να κάνει αποτελέσματα πολλαπλών γραμμών, το FROM μπορεί να κάνει μόνο αποτελέσματα μιας σειράς και WHERE βασίζεται στο φιλτράρισμα πολλαπλών σειρών στα αποτελέσματα για την έξοδο.

Δεν θα συνιστούσα να κάνω ένα δευτερεύον ερώτημα εκτός αν είναι ο μόνος τρόπος, επειδή ο SQL Server είναι βελτιστοποιημένος για να κάνει join, δεν υπο-ερωτήματα και πολλά υπο-ερωτήματα μπορούν να γίνουν joins αντ 'αυτού, η οποία επιταχύνει την απόδοση. Τα τραπέζια Temp είναι ιδανικά για όταν δεν χρειάζεστε ένα μόνιμο τραπέζι για τη συλλογή δεδομένων κατά την εμφάνιση αποτελεσμάτων.


Απάντηση 3:

Ο πίνακας @temp μπορεί να ερωτηθεί / εισαχθεί / ενημερωθεί πολλές φορές σε κάποιο κώδικα T-SQL (proc ή func). κάτω από την κουκούλα είναι ένας #temp πίνακας σε ένα temp datadase

υποερώτηση είναι επιτόπου εναντίον πίνακα @temp. Είναι απλά ένα declaread συνθήματα από την άποψη του T-SQL ή ένα unmodifiable rowset από την άποψη των δεδομένων.

Δεν μπορείτε να εισαγάγετε / ενημερώσετε / διαγράψετε σε υποερώτηση, αλλά μπορείτε να κάνετε στον πίνακα @temp

Πρέπει να χρησιμοποιήσετε το CTE για να πολλαπλασιάσετε την επιλογή από το υποσύστημα.