Monday, 15 September 2014

sql - Query is very very slow for processing 200000 plus records -


मेरे पास Patient & amp; में 200,000 पंक्तियाँ हैं व्यक्ति तालिका, और क्वेरी को निष्पादित करने के लिए 30 सेकंड लगते हैं।

मैंने प्राथमिक कुंजी (और संकुल अनुक्रमणिका) को व्यक्ति तालिका में परिभाषित किया है PersonId और PatientId में Patient तालिका में मेरी प्रक्रिया के प्रदर्शन में सुधार करने के लिए मैं यहाँ क्या कर सकता हूं?

डेटाबेस विकास पक्ष के लिए नया मुझे केवल मूल एसक्यूएल पता है यह भी सुनिश्चित नहीं है कि SQL सर्वर 200,000 पंक्तियां जल्दी से संभाल सकता है

पूरी गतिशील प्रक्रिया जिस पर आप देख सकते हैं

किसी को भी इस तरह से बड़ी पंक्तियाँ संभालने का सामना करना पड़ा? मैं यहां प्रदर्शन को कैसे सुधारूं?

  DECLARE @ वापसी_वल्यूएट, @ कुटिरॉव्स बिल्टीन्ट, @ इंट पेज्स इंट, @TenantId int, @IntItems int, @page int SET @TenantId = 1 SET @unitItems = 20 सेट @page = 1 घोषित @PatientSearch टेबल ([PatientId] [bigint] नहीं NULL, [PatientIdentifier] [nvarchar] (50) शून्य, [PersonNumber] [nvarchar] (20) शून्य, [FIRSTNAME] [nvarchar] (100 ) नल नहीं, [अंतिम नाम] [नर्वचर] (100) नहीं नल, [रिस्फास्टनाम] [नवर्वचर] (100) नहीं नल, [रिस्लाइटनाम] [नर्वचर] (100) नहीं नल, [एडफस्टनाम] [नर्वचर] (100) नहीं Null, [AddLastName] [nvarchar] (100) नहीं नल, [पता] [नववर्कर] (255) नल, [शहर] [नर्वचर] (50) नल, [राज्य] [नर्वचर] (50) नल, [ज़िपकोड] [nvarchar] (20) शून्य, [देश] [nvarchar] (50) शून्य, [RowNumber] [bigint] शून्य) में @PatientSearch चयन PAT.PatientId, PAT.PatientIdentifier, PER.PersonNumber, PER.FirstName, प्रति डालें। LastName, RES_PER.FirstName AS ResFirstName, RES_PER.LastName AS ResLastName, ADD_PER.प्रथम नाम ASFirstName, ADD_PER.LastName AS AddLastName, PER.Address, PER.City, PER.State, PER.ZipCode, PER.Country, ROW_NUMBER () से अधिक (PAT.PatientId DESC द्वारा आदेश) के रूप में RowNumber dbo.Patient से PAT अंदरूनी के रूप में पर के अनुसार प्रति dbo.Person शामिल हों PAT.PersonId = PER.PersonId अंदरूनी dbo.Person के शामिल होते ही RES_PER पर PAT.ResponsiblePersonId = RES_PER.PersonId अंदरूनी dbo.Person के शामिल होते ही ADD_PER पर PAT.AddedBy = ADD_PER.PersonId अंदरूनी PAT.PatientId पर बी के रूप में शामिल dbo.Booking = बी .PatientId कहां PAT.TenantId = @TenantId और B.CategoryId = @CategoryId PAT.PatientId, PAT.PatientIdentifier, PER.PersonNumber, PER.FirstName, PER.LastName, RES_PER.FirstName, RES_PER.LastName, ADD_PER.FirstName द्वारा समूह, ADD_PER.ListName, PER.Address, PER.City, PER.State, PER.ZipCode, प्रति। देश; SELECT @unitRows = @@ ROWCOUNT, @ यूनिटपृष्ठ = (@ कुटीर / / निट आईटम्स) + 1; का चयन करें * से पेटेंट खोज के रूप में आईटी जहां रोनांबर बीते (@ पेज - 1) * @unitItems + 1 और @unitItems * @page    

अच्छा, जब तक कि मुझे कुछ याद आ रही है (जैसे डुप्लिकेट पंक्तियाँ?) आप GROUP BY

  ग्रुप को निकाल सकते हैं द्वारा PAT.PatientId, PAT.PatientIdentifier, PER.PersonNumber, PER.FirstName, PER.LastName, RES_PER.FirstName, RES_PER.LastName, ADD_PER.FirstName, ADD_PER.LastName, PER.Address, PER.City, PER.State, प्रति । ज़िपकोड, प्रति देश   

के रूप में आप चयन सूची में सभी क्षेत्रों द्वारा समूहबद्ध हैं, और आप PAT.PatientId

इसके अलावा, आपको तालिका में उसमें सम्मिलित होने वाले कॉलमों वाले टेबल्स पर होना चाहिए।

उदाहरण के लिए, मैं टेबल पर एक इंडेक्स बनाऊँगा जिसमें कॉलम के साथ मरीज (TenantId, PersonId, ResponsiblePersonId, AddBy ) शामिल कॉलम के साथ (रोगी आईडी, रोगी पहचानकर्ता)

No comments:

Post a Comment