एसक्यूएल - अस्थायी तालिका: बनाम केवल प्राथमिक कुंजी अस्थायी तालिका के सभी कॉलम भंडारण

वोट
2

मैं पेजिंग प्रयोजनों के लिए एक अस्थायी तालिका बनाने के लिए की आवश्यकता होगी। मैं एक अस्थायी तालिका में सभी रिकॉर्ड का चयन किया जाएगा और उसके बाद उसके साथ आगे की प्रक्रिया है।

मैं सोच रहा हूँ जो निम्न में से एक बेहतर तरीका है:

1) पंक्तियों मैं की आवश्यकता होगी का चयन करने में सक्षम होने के अस्थायी तालिका में मेरी प्राथमिक तालिका के सभी स्तंभों का चयन करें और उसके बाद

या

2) अस्थायी तालिका में प्राथमिक तालिका का केवल प्राथमिक कुंजी का चयन करें और फिर बाद में प्राथमिक तालिका के साथ शामिल होने?

वहाँ किसी भी आकार पर गौर दृष्टिकोण 2 बनाम दृष्टिकोण 1 के साथ काम है?

[संपादित करें]

मैं क्योंकि मैं पहली बार दृष्टिकोण किया होता लेकिन प्रक्रिया [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

एक टेबल चर एक अस्थायी मेज पर प्राथमिकता दी जाएगी, अगर इसकी अपनी शर्तों के अंतर्गत।

विकल्प 2, कम संसाधनों का उपयोग कम डेटा दोहराव न होने के कारण होता है।

यह एक गंदा पढ़ने होने के बारे में टोनी अंक वास्तव में कुछ आप पर विचार किया जाना चाहिए।

आप बता सकते हैं कि कैसे आप अस्थायी तालिकाओं के साथ 'पेजिंग' कर रहे हैं? इसकी नहीं एक पेजिंग विधि मैं से परिचित हूँ।

संपादित करें: अपनी पोस्ट को संपादित को देखने के बाद, आप निश्चित रूप से इस मामले में एक तालिका चर का उपयोग करना चाहिए। इसकी कम करने के लिए सफाई और आप अभ्यस्त इतना tempdb बुझाना।

इसके अलावा, क्या यह अस्थायी तालिका लाभ स्पष्ट नहीं की अपनी तरह देता है। अपने उद्देश्य एक वस्तु / applicaiton तक पहुँचने से एक उपयोगकर्ता को रोकने के लिए है, तो आप इसे होने के बारे में हिस्सा क्यों जोड़ रहे हैं तो "केवल इस विशेष डेटा तालिका पृष्ठ पर अगर प्रतिबंधित"। यह एक सुरक्षा के नजरिए से छेद-y की तरह लगता है।

अस्थायी तालिका काफी, भी समाप्त किया जा सकता है, क्योंकि यह एक ही टेबल से चयन करता है।

09/12/2008 को 16:15
का स्रोत उपयोगकर्ता

वोट
1

दृष्टिकोण 1 के साथ, अस्थायी तालिका में डेटा वास्तविक डेटा के साथ कदम से बाहर हो सकता है, यानी अगर अन्य सत्र वास्तविक डेटा में परिवर्तन करें। यह ठीक हो सकता है अगर तुम सिर्फ एक निश्चित बिंदु पर ले लिया डेटा का एक स्नैपशॉट देख रहे हैं, लेकिन खतरनाक होगा आप भी अस्थायी प्रतिलिपि में किए गए परिवर्तनों के आधार पर रीयल तालिका अद्यतन करने गए थे।

09/12/2008 को 16:04
का स्रोत उपयोगकर्ता

वोट
0

पेजिंग के लिए एक वैकल्पिक (वैसे मेरी कंपनी यह होता है) CTE के उपयोग करने के लिए है।

इस उदाहरण देखें 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

इस तरह से इसके बारे में सोचो। मान लीजिए कि आपकी क्वेरी पर्याप्त रिकॉर्ड वापसी होगी 1000 पृष्ठों को भरने के लिए। आप कितने उपयोगकर्ताओं लगता है वास्तव में उन सभी पृष्ठों को देखने होगा? केवल आईडी लौटने रखकर आप जानकारी आप कर सकते हैं या देखने की जरूरत नहीं हो सकता है की एक बहुत कुछ वापस नहीं कर रहे हैं। तो यह नेटवर्क और सर्वर संसाधनों को बचाने चाहिए। और अगर वे वास्तव में पृष्ठों का एक बहुत माध्यम से जाना है, यह पर्याप्त समय है कि डेटा विवरण वास्तव में ताजा किए जाने की आवश्यकता हो सकती है ले जाएगा।

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