SQL - Sıcaklık Tablo: Yalnızca birincil anahtarın karşı geçici tablodaki tüm sütunları saklanması

oy
2

Ben çağrı amaçlı geçici bir tablo oluşturmak gerekir. Geçici bir tabloya tüm kayıtları seçerek ve sonra onunla daha fazla işlem yapmak olacaktır.

Daha iyi bir yaklaşım olduğunu aşağıdakilerden hangisi merak ediyorum:

1) Ben gerekir satırları seçmek mümkün ardından Temp Tablo içine benim İlköğretim Tablo tüm sütunları seçip

VEYA

2) Sıcaklık Tablo içine İlköğretim Tablo yalnızca birincil anahtar seçip daha sonra da birincil Tablo ile katılmadan?

yaklaşımı 2 karşı yaklaşımı 1 ile çalışırken herhangi bir boyut göz var mı?

[DÜZENLE]

İlk yaklaşım yapmış ama USUL [dbo] bakarak olurdu çünkü soruyorum. [Aspnet_Membership_FindUsersByName], o ASP.NET Üyeliği ekleniyordu, onlar Yaklaşım 2 yapıyorlar

[EDIT2]

Saklı yordam erişimi olmayan insanlarla:

  -- 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
Oluştur 09/12/2008 saat 16:01
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
1

yaklaşımla 1 ile geçici tablodaki verilerin diğer oturumları gerçek veriler üzerinde değişiklik yapmak, yani eğer gerçek veriler ile adım dışı kalabilir. Bu sadece belli bir noktada alınan verilerin anlık görüntüsünü görmektesiniz eğer sorun olmaz, ama aynı zamanda geçici kopyasına da değişikliklere göre gerçek tabloyu güncelleyerek olsaydı tehlikeli olur.

Cevap 09/12/2008 saat 16:04
kaynak kullanıcı

oy
2

Bir tablo değişken eğer onun için sınırlar dahilinde, geçici bir tabloya göre tercih edilecektir.

daha az veri çoğaltma olduğundan Seçenek 2, daha az kaynak kullanır.

Bu bir kirli okuma olma konusunda Tony puanları gerçekten dikkate gereken bir şey vardır.

Eğer geçici tablolarla 'çağrı' nasıl açıklayabilir? Onun değil bir çağrı yöntemi ben aşina değilim.

DÜZENLEME: yayınınız düzenlemek bakarak sonra, kesinlikle bu durumda bir tablo değişkeni kullanmalıdır. Onun daha az temizleme ve alışkanlık bu kadar tempdb söndür.

Ayrıca, bu geçici bir tablo yarar neyi belirsiz onun tür verir. Amacınız o zaman neden olma konusunda rol ekliyoruz sonra, bir nesne / uygulamamızla erişmesini bir kullanıcı durdurmak için ise "sadece bu özel veri tablosu sayfasında ise kısıtlı". Bu güvenlik açısından delik y tür görünüyor.

aynı tablolardan seçer beri geçici tablo hemen hemen aynı zamanda elimine edilebilir.

Cevap 09/12/2008 saat 16:15
kaynak kullanıcı

oy
0

Bu, tam olarak sunucuda Çağrı için kullanmak yaklaşımdır

Sadece anahtar değerleri ile bir Table Değişken (neden işlem günlük kaydı yormayan?) oluşturun. (Bir AUTONUM Kimlik sütununda Birincil Anahtar ile tablo oluşturun -. Bu ROWNUM olacaktır)

kullanıcılar temel tabloya anahtarlarını takın sıralama / filtreleme kriterleri .. Kimlik sütunu artık ettirme için kullanılabilecek bir satır numarasıdır.

anahtar değeri üzerinde Katılım, gerekli gerçek veriler ile diğer tablolara katıldı tablo değişken seçin

Where RowNum Between ((PageNumber-1) * PageSize) + 1 And PageNumber * PageSize
Cevap 09/12/2008 saat 16:43
kaynak kullanıcı

oy
0

Şöyle düşün. sorgu 1000 sayfa doldurmak için yeterli kayıtları döneceğini varsayalım. Gerçekten bütün bu sayfalara bakar mısın kaç kullanıcı düşünüyorsunuz? Sadece kimlikleri iade ederek, Eğer veya görmek gerek olmayabilir birçok bilgi iade edilmez. Bu yüzden ağ ve sunucu kaynaklarına tasarruf gerekir. onlar gerçekten çok fazla sayfa geçmesi Ve eğer, bu veri ayrıntıları gerçekten yenilenmesi gerekebilir yeterli zaman alacaktı.

Cevap 09/12/2008 saat 21:49
kaynak kullanıcı

oy
0

çağrı bir alternatif (benim şirket bunu yapar şekilde) CTE'ler kullanmaktır.

Bu örneği inceleyin 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
Cevap 09/07/2009 saat 09:40
kaynak kullanıcı

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