SQL - Temp Tabulka: Ukládání všechny sloupce v tabulce temp oproti pouze primární klíč

hlasů
2

Budu muset vytvořit dočasnou tabulku pro účely paging. Byl bych výběru všech záznamů do dočasné tabulky a proveďte další zpracování s ním.

Já jsem přemýšlel, která z následujících možností je lepší přístup:

1) Vyberte všechny sloupce mé základní tabulky do tabulky Temp a pak budou moci vybrat řádky bych potřebovat

NEBO

2) Vyberte pouze primární klíč primární tabulky do Temp tabulky a pak spojujícími primární tabulky později?

Je nějaká velikost hlediskem při práci s přístupem 1 ve srovnání s přístupem 2?

[UPRAVIT]

Ptám se proto, že by to udělal první přístup, ale při pohledu na POSTUPU [dbo]. [Aspnet_Membership_FindUsersByName], který byl součástí ASP.NET členství, dělají přístupu 2

[EDIT2]

S lidmi, nemají přístup do uložené procedury:

  -- 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
Položena 09/12/2008 v 16:01
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
2

Proměnná Tabulka bude mít přednost před temp tabulky, pokud jeho rámci svých omezení.

Varianta 2 by použití méně zdrojů, protože tam je méně duplikace dat.

Tonyho ponaučení což je špinavé čtení jsou opravdu něco, co by mělo být zvážení.

Můžete vysvětlit, jak jste ‚stránkovací‘ s dočasné tabulky? To není způsob, stránkovací Jsem obeznámen s.

EDIT: Po pohledu na váš příspěvek úpravy, měli byste určitě používat tabulky proměnné v tomto případě. Jeho méně vyčištění a jste zvyklý sfouknout tempdb tolik.

Také jeho druh jasné, jaké výhody toto temp tabulku dává. Pokud je vaším cílem zastavit uživateli přístup k objektu / applicaiton, pak proč se přidá část o to být „omezena pouze v případě této konkrétní datové tabulky straně“. Zdá se, že druh otvorů y z hlediska zabezpečení.

Temp tabulka může být do značné míry odstraněny také, protože vybere ze stejných tabulek.

Odpovězeno 09/12/2008 v 16:15
zdroj uživatelem

hlasů
1

S přístupem 1, a údaje v tabulce temp může být mimo krok s reálnými daty, tedy pokud ostatní relace provést změny reálných dat. To může být v pořádku, pokud jste právě prohlížíte snímek z dat pořízených v určitém bodě, ale bylo by nebezpečné, pokud se také aktualizuje skutečné tabulky na základě změn provedených v dočasné kopii.

Odpovězeno 09/12/2008 v 16:04
zdroj uživatelem

hlasů
0

Alternativou ke klávesnici (jak moje firma to dělá) je použít CTE je.

Podívejte se na tento příklad 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
Odpovězeno 09/07/2009 v 09:40
zdroj uživatelem

hlasů
0

Přemýšlejte o tom tímto způsobem. Předpokládejme, že váš dotaz vrátí dostatek záznamy k naplnění 1000 stran. Kolik uživatelů si myslíte, že by se skutečně podívat na všechny ty stránky? Vrácením pouze identifikátory, nejste vrací spoustu informací, které mohou nebo nemusí vidět. Takže by to mělo ušetřit na síťových a serverových zdrojů. A v případě, že opravdu projít hodně stránek, trvalo by dost času, že datové údaje by mohly skutečně potřebují být aktualizovány.

Odpovězeno 09/12/2008 v 21:49
zdroj uživatelem

hlasů
0

To je přesně ten přístup, mohu použít na klávesnici na serveru,

Vytvoření tabulky proměnné (proto roamingovými režii protokolování transakcí?) Jen s klíčovými hodnotami. (Vytvořte tabulku s AUTONUM identity sloupce primárního klíče. - To bude rownum)

Vložení klíče do tabulky založené na uživatelích, kteří třídění / filtrování kritéria .. Sloupec identity je nyní číslo řádku, které lze použít pro klávesnici.

Vyberte si z tabulky proměnné vstoupily do jiných tabulek s reálnými daty požadovaných Připojen na hodnoty klíče,

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Odpovězeno 09/12/2008 v 16:43
zdroj uživatelem

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