मेरे पास लगभग 20+ मिलियन रिकॉर्ड वाली एक तालिका है।SQL सर्वर धीमी बड़ी तालिका से चुनें
EventId UNIQUEIDENTIFIER
SourceUserId UNIQUEIDENTIFIER
DestinationUserId UNIQUEIDENTIFIER
CreatedAt DATETIME
TypeId INT
MetaId INT
तालिका प्राप्त कर रहा है प्रत्येक दिन 100k के बारे में + रिकॉर्ड:
संरचना की तरह है।
मैं अनुक्रमित MetaId को छोड़कर प्रत्येक स्तंभ पर, के रूप में यह 'जहां' खंड
में नहीं किया जाता है समस्या यह है जब मैं जैसे लेने के लिए चाहते हैं। वांछित SourceUserId
क्वेरी के लिए नवीनतम 100 रिकॉर्ड निष्पादित करने के लिए कभी-कभी 4 मिनट तक लगते हैं, जो स्वीकार्य नहीं है।
ईजी।
SELECT TOP 100 * FROM Events WITH (NOLOCK)
WHERE SourceUserId = '15b534b17-5a5a-415a-9fc0-7565199c3461'
AND
(
TypeId IN (2, 3, 4)
OR
(TypeId = 60 AND SrcMemberId != DstMemberId)
)
ORDER BY CreatedAt DESC
मैं विभाजन आदि नहीं कर सकता क्योंकि मैं SQL सर्वर और एंटरप्राइज़ का मानक संस्करण उपयोग कर रहा हूं।
मुझे यह भी लगता है कि तालिका धीमी होने के लिए काफी छोटी है।
मुझे लगता है कि समस्या ऑर्डर द्वारा ऑर्डर के रूप में है क्योंकि डीबी को डेटा के बहुत बड़े सेट के माध्यम से जाना चाहिए।
कोई विचार यह कैसे जल्दी बनाता है?
शायद संबंधपरक डेटाबेस उस तरह के डेटा के लिए एक अच्छा विचार नहीं है।
डाटा हमेशा उठाया जा रहा है का आदेश दिया CreatedAt DESC द्वारा
पढ़ने के लिए धन्यवाद।
PabloX
इस पर वोट देना, क्योंकि मेरे पास लगभग एक ही समस्या है! –