SQL - Temp Tabel: Stocarea tuturor coloanelor din tabelul temp, față de numai cheie primară

voturi
2

Am avea nevoie pentru a crea un tabel temp pentru scopuri de paginare. Mi-ar fi selectarea tuturor înregistrărilor într-un tabel temp și apoi face o prelucrare ulterioară cu ea.

Mă întreb care dintre următoarele este o abordare mai bună:

1) Selectează toate coloanele din tabelul meu principal în tabel Temp și apoi posibilitatea de a selecta rândurile am avea nevoie

SAU

2) Selectați numai cheia primară a tabelului primar în tabelul Temp și apoi se unește cu tabelul primar mai târziu?

Există vreo considerație dimensiune atunci când se lucrează cu abordarea 1 față de abordarea 2?

[EDITAȚI | ×]

Vă întreb pentru că mi-ar fi făcut prima abordare, dar uita la PROCEDURĂ [DBO]. [Aspnet_Membership_FindUsersByName], care a fost inclus cu ASP.NET de membru, fac Abordarea 2

[EDIT2]

Cu oameni care nu au acces la procedură stocată:

  -- 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
Întrebat 09/12/2008 la 16:01
sursa de către utilizator
În alte limbi...                            


5 răspunsuri

voturi
2

O variabilă de masă ar fi de preferat într-un tabel temp, în cazul în care în termen de constrângerile.

Opțiunea 2 ar folosi mai puține resurse, deoarece există mai puține date duplicarea.

puncte Tony despre aceasta fiind o citire murdar sunt într-adevăr ceva ce ar trebui să fie în considerare.

Poți explica modul în care sunt „paginare“ cu mese temp? Sa nu o metodă de paginare Sunt familiarizat cu.

EDIT: După ce se uită la postul de editare, ar trebui să utilizați o variabilă tabel cu siguranță în acest caz. Sa mai puțin pentru a curăța și vă obiceiul sufla tempdb atât de mult.

De asemenea, acest fel de clar ce beneficii acest tabel temp dă. Dacă obiectivul dvs. este de a opri un utilizator să acceseze un obiect / applicaiton, atunci de ce adăugați partea cu privire la aceasta fiind „restrâns numai în cazul în care pe această pagină special, tabel de date“. Pare un fel de gaura-y dintr-o perspectivă de securitate.

Tabelul temp poate fi destul de mult, de asemenea, eliminate, deoarece selectează din aceleași tabele.

Publicat 09/12/2008 la 16:15
sursa de către utilizator

voturi
1

Cu abordarea 1, datele din tabelul de temperatură poate fi în pas cu datele reale, de exemplu, în cazul în care alte sesiuni face modificări la datele reale. Acest lucru poate fi OK dacă doar vizualizați o imagine a datelor luate la un anumit punct, dar ar fi periculos dacă ați fost actualizați, de asemenea, tabelul de real, pe baza modificărilor aduse copiei temporare.

Publicat 09/12/2008 la 16:04
sursa de către utilizator

voturi
0

O alternativă la paginare (modul în care compania mea o face) este de a utiliza lui CTE.

Check out acest exemplu de la 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
Publicat 09/07/2009 la 09:40
sursa de către utilizator

voturi
0

Gândiți-vă în acest fel. Să presupunem că interogarea ar reveni suficient de înregistrări pentru a popula 1000 de pagini. Cât de mulți utilizatori crezi că ar arăta cu adevărat la toate acele pagini? Prin returnarea doar ID-uri, nu se întorc o mulțime de informații pe care le poate sau nu ar putea avea nevoie să vadă. Deci, ar trebui să salveze pe resursele de rețea și server. Și dacă ei într-adevăr trec printr-o mulțime de pagini, ar dura suficient timp ca detaliile de date ar putea avea nevoie într-adevăr, să fie actualizate.

Publicat 09/12/2008 la 21:49
sursa de către utilizator

voturi
0

Aceasta este exact abordarea am folosi pentru paginare pe server,

Crearea unei variabile de masa (de ce suporta aeriene de logare tranzacție?) Cu doar valorile cheie. (Creați tabelul cu o coloană de identitate autonum cheie primară -. Acest lucru va fi ROWNUM)

Introduceți cheile în tabelul bazat pe utilizatorii sortare criterii / filtrare .. coloană de identitate este acum un număr de rând, care poate fi utilizat pentru paginare.

Selectați din tabelul alăturat variabilă la alte tabele cu date reale necesare, pe Alăturat valoarea cheii,

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Publicat 09/12/2008 la 16:43
sursa de către utilizator

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