SQL - Temp tabeli: Przechowywanie wszystkich kolumn w tabeli temp kontra tylko podstawowy klucz

głosy
2

będzie trzeba utworzyć tabelę temp celach przywoławczych. Byłbym wybierając wszystkie rekordy do tabeli temp, a następnie wykonaj dalsze przetwarzanie z nim.

Zastanawiam się, które z poniższych jest lepsze podejście:

1) Wybierz wszystkie kolumny mojego Podstawowej tabeli do tabeli temp, a następnie jest w stanie wybrać wiersze musiałbym

LUB

2) Wybierz tylko klucz podstawowy tabeli podstawowej do tabeli Temp, a następnie łączenie z tabeli podstawowej później?

Czy istnieje jakiś uwagę rozmiar podczas pracy z podejścia 1 kontra podejście 2?

[EDYTOWAĆ]

Pytam bo bym zrobił pierwsze podejście, ale patrząc na PROCEDURY [dbo]. [Aspnet_Membership_FindUsersByName], który był dołączony ASP.NET Membership, robią podejście 2

[EDIT2]

Z ludźmi, bez dostępu do procedury przechowywanej:

  -- 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
Utwórz 09/12/2008 o 16:01
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
2

Zmienna Tabela byłyby korzystniejsze niż tabeli temp, jeśli jej w twoich ograniczeń.

Wariant 2 zużywają mniej zasobów, ponieważ jest mniej danych dublowanie.

Punkty Tony'ego o tym, że jest brudny odczytu są naprawdę coś powinno być brane pod uwagę.

Czy może Pan wyjaśnić, w jaki sposób są „stronicowania” z tabel tymczasowych? Nie jest to metoda stronicowania znam.

EDIT: Po patrząc na edycję postu, należy zdecydowanie użyć zmiennej tabeli w tej sprawie. Jego mniej do czyszczenia i wont zdmuchnąć tempdb tyle.

Również jego niby jasne, co korzystają z tej tabeli temp daje. Jeśli celem jest zatrzymanie użytkownikowi dostępu do obiektu / applicaiton, to dlaczego dodając część o to bycie „tylko ograniczony jeśli na tej konkretnej stronie tabeli danych”. Wydaje rodzaj hole-y z punktu widzenia bezpieczeństwa.

Tabela temp może być dość dużo wyeliminowane również, ponieważ wybiera to z tych samych tabelach.

Odpowiedział 09/12/2008 o 16:15
źródło użytkownik

głosy
1

Z podejścia 1, dane w tabeli temp mogą być sprzeczne z rzeczywistych danych, to znaczy, jeśli inne sesje wprowadzić zmiany do rzeczywistych danych. To może być OK, jeśli jesteś po prostu przeglądania migawkę danych pobranych w pewnym momencie, ale mogłoby być niebezpieczne, jeśli były również aktualizowanie prawdziwym stole na podstawie zmian wprowadzonych do tymczasowej kopii.

Odpowiedział 09/12/2008 o 16:04
źródło użytkownik

głosy
0

Alternatywą dla stronicowania (sposób moja firma robi) jest użycie CTE jest.

Sprawdź ten przykład z 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
Odpowiedział 09/07/2009 o 09:40
źródło użytkownik

głosy
0

Pomyśl o tym w ten sposób. Załóżmy zapytanie wróci wystarczająco dużo rekordów do wypełnienia 1000 stron. Ilu użytkowników sądzisz naprawdę patrzeć na tych wszystkich stronach? Powracając jedynie identyfikatory, nie wracają dużo informacji, które mogą lub nie mogą wymagać, aby zobaczyć. Więc powinien zapisać na sieciowych i serwerowych zasobów. A jeśli naprawdę przejść przez wiele stron, zajęłoby dużo czasu, że szczegóły dane mogą rzeczywiście wymagają odświeżenia.

Odpowiedział 09/12/2008 o 21:49
źródło użytkownik

głosy
0

To jest właśnie podejście używam stronicowania na serwerze,

Tworzenie zmiennej tabeli (dlaczego ponieść napowietrznej rejestrowania transakcji?) Tylko z kluczowych wartości. (Utwórz tabelę z kolumną autonum Identity klucz podstawowy. - To będzie rownum)

Włóż klucze do tabeli w oparciu o kryteria sortowania użytkowników / filtrowania .. kolumna tożsamości jest obecnie numer wiersza, który może być wykorzystywany do przywoływania.

Wybierz z tabeli zmiennej dołączył do innych tabel z rzeczywistych danych wymaganych dołączył na wartości klucza,

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Odpowiedział 09/12/2008 o 16:43
źródło użytkownik

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