SQL - Θερμοκρασία Πίνακας: Αποθήκευση όλες τις στήλες του πίνακα temp έναντι μόνο Δημοτικό κλειδί

ψήφοι
2

Θα πρέπει να δημιουργήσετε έναν πίνακα temp για λόγους σελιδοποίησης. Θα ήθελα να την επιλογή όλα τα αρχεία σε έναν πίνακα temp και στη συνέχεια να κάνει περαιτέρω επεξεργασία με αυτό.

Αναρωτιέμαι ποια από τα παρακάτω είναι μια καλύτερη προσέγγιση:

1) Επιλέξτε όλες τις στήλες της Δημοτικής Πίνακα μου στο πίνακα Temp και, στη συνέχεια, να είναι σε θέση να επιλέξετε τις σειρές που θα χρειαστεί

Ή

2) Επιλέξτε μόνο το πρωτεύον κλειδί του πρωτεύοντα πίνακα στον πίνακα Temp και, στη συνέχεια, που ενώνει με την Πρωτοβάθμια Πίνακας αργότερα;

Υπάρχει κάποια εκτίμηση μέγεθος, όταν ασχολούνται με προσέγγιση 1 σε σχέση με την προσέγγιση 2;

[ΕΠΕΞΕΡΓΑΣΙΑ]

Ζητώ, γιατί θα είχα κάνει την πρώτη προσέγγιση, αλλά κοιτάζοντας ΔΙΑΔΙΚΑΣΙΑ [dbo]. [Aspnet_Membership_FindUsersByName], που είχε συμπεριληφθεί με ASP.NET ιδιότητα του μέλους, κάνουν Προσέγγιση 2

[EDIT2]

Με τους ανθρώπους που δεν έχουν πρόσβαση στην αποθηκευμένη διαδικασία:

  -- Insert into our temp table
INSERT IGNORE  INTO #PageIndexForUsers (UserId)
    SELECT u.UserId
    FROM   dbo.aspnet_Users u, dbo.aspnet_Membership m
    WHERE  u.ApplicationId = @ApplicationId AND m.UserId = u.UserId AND u.LoweredUserName LIKE LOWER(@UserNameToMatch)
    ORDER BY u.UserName


SELECT  u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved,
        m.CreateDate,
        m.LastLoginDate,
        u.LastActivityDate,
        m.LastPasswordChangedDate,
        u.UserId, m.IsLockedOut,
        m.LastLockoutDate
FROM   dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p
WHERE  u.UserId = p.UserId AND u.UserId = m.UserId AND
       p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
ORDER BY u.UserName
Δημοσιεύθηκε 09/12/2008 στις 16:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
2

Μια μεταβλητή πίνακα θα πρέπει να προτιμάται σε σχέση με έναν πίνακα temp, εάν εντός περιορισμούς σας.

Η επιλογή 2 θα χρησιμοποιεί λιγότερους πόρους, επειδή υπάρχει λιγότερη επικάλυψη δεδομένων.

σημεία του Τόνι γι 'αυτό είναι μια βρώμικη ανάγνωση είναι πραγματικά κάτι που πρέπει να εξεταστεί.

Μπορείτε να μας εξηγήσετε πώς θα είναι «σελιδοποίησης» με πίνακες temp; δεν είναι μια μέθοδος σελιδοποίησης του είμαι εξοικειωμένος με.

EDIT: Μετά την εξέταση μετά την επεξεργασία σας, θα πρέπει να χρησιμοποιήσετε σίγουρα μια μεταβλητή πίνακα σε αυτήν την περίπτωση. λιγότερο για τον καθαρισμό του και δεν θα σβήσει το tempdb τόσο πολύ.

Επίσης, το είδος της ασαφές το τι επωφεληθούν αυτού του πίνακα temp δίνει. Αν ο στόχος σας είναι να σταματήσετε ένα χρήστη από την πρόσβαση σε ένα αντικείμενο / applicaiton, τότε γιατί είσαι προσθέτοντας το μέρος για να είναι «περιορίζεται μόνο εάν στη συγκεκριμένη σελίδα πίνακα των δεδομένων». Φαίνεται ότι το είδος της τρύπας-y από την άποψη της ασφάλειας.

Ο πίνακας θερμοκρασία μπορεί να σχεδόν εξαλειφθεί, επίσης, δεδομένου ότι επιλέγει από τους ίδιους πίνακες.

Απαντήθηκε 09/12/2008 στις 16:15
πηγή χρήστη

ψήφοι
1

Με την προσέγγιση 1, τα στοιχεία του πίνακα temp μπορεί να είναι έξω από το βήμα με τα πραγματικά δεδομένα, δηλαδή εάν άλλες συνεδρίες κάνει αλλαγές στα πραγματικά δεδομένα. Αυτό μπορεί να είναι ΟΚ, αν είστε απλά βλέπουν ένα στιγμιότυπο των δεδομένων που λαμβάνονται σε ένα ορισμένο σημείο, αλλά θα ήταν επικίνδυνο αν ήταν, επίσης, την ενημέρωση του πραγματικού πίνακα με βάση τις αλλαγές που έγιναν στο προσωρινό αντίγραφο.

Απαντήθηκε 09/12/2008 στις 16:04
πηγή χρήστη

ψήφοι
0

Μια εναλλακτική λύση για τηλε-ειδοποίησης (ο τρόπος που η εταιρεία μου το κάνει) είναι να χρησιμοποιήσετε ΕΕΠ.

Ελέγξτε έξω αυτό το παράδειγμα από http://softscenario.blogspot.com/2007/11/sql-2005-server-side-paging-using-cte.html

CREATE PROC GetPagedEmployees (@NumbersOnPage INT=25,@PageNumb INT = 1)
AS BEGIN

WITH AllEmployees AS
(SELECT ROW_NUMBER() OVER (Order by [Person].[Contact].[LastName]) AS RowID,
[FirstName],[MiddleName],[LastName],[EmailAddress] FROM [Person].[Contact])

SELECT [FirstName],[MiddleName],[LastName],[EmailAddress]
FROM AllEmployees WHERE RowID BETWEEN
((@PageNumb - 1) * @NumbersOnPage) + 1 AND @PageNumb * NumbersOnPage
ORDER BY RowID
Απαντήθηκε 09/07/2009 στις 09:40
πηγή χρήστη

ψήφοι
0

Σκεφτείτε το αυτό τον τρόπο. Ας υποθέσουμε ότι το ερώτημά σας θα επιστρέψει αρκετά στοιχεία για να συμπληρώσετε 1.000 σελίδες. Πόσους χρήστες νομίζετε ότι θα δούμε πραγματικά σε όλες αυτές τις σελίδες; Με την επιστροφή μόνο τις ταυτότητες, δεν είστε επιστρέφουν πολλές πληροφορίες που μπορεί ή δεν μπορεί να χρειαστεί να δείτε. Γι 'αυτό πρέπει να σώσει τη δικτύου και διακομιστή πόρους. Και αν πραγματικά θα περάσουν από πολλές σελίδες, θα πάρει αρκετό χρόνο που οι λεπτομέρειες των δεδομένων μπορεί πράγματι πρέπει να ανανεώνονται.

Απαντήθηκε 09/12/2008 στις 21:49
πηγή χρήστη

ψήφοι
0

Αυτή ακριβώς είναι η προσέγγιση που μπορώ να χρησιμοποιήσω για σελιδοποίησης στο διακομιστή,

Δημιουργήσετε μια μεταβλητή πίνακα (γιατί συνεπάγεται την επιβάρυνση της καταγραφής συναλλαγών;) Με μόνο τις βασικές αξίες. (Δημιουργία του πίνακα με μια στήλη autonum ταυτότητας πρωτεύον κλειδί -. Αυτό θα είναι ROWNUM)

Τοποθετήστε τα κλειδιά στον πίνακα με βάση τα μέλη του είδους κριτήρια / φιλτράρισμα .. στήλη ταυτότητας είναι πλέον ένας αριθμός σειράς που μπορεί να χρησιμοποιηθεί για την αναζήτηση.

Επιλέξτε από τον πίνακα μεταβλητή συνδέεται με άλλους πίνακες με πραγματικά δεδομένα που απαιτούνται, εγγραφής σε βασικά αξίας,

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Απαντήθηκε 09/12/2008 στις 16:43
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more