2010-05-21 16 views
5

मेरे पास एक बड़ी ऐतिहासिक लेनदेन तालिका (15-20 मिलियन पंक्तियां कई कॉलम) हैं और वाली एक पंक्ति एक पंक्ति एक कॉलम है। एक पंक्ति वाली तालिका में एक तिथि (अंतिम प्रसंस्करण दिनांक) होती है जिसका उपयोग ट्रांज़ेक्शन तालिका ('process_date') में डेटा खींचने के लिए किया जाएगा।एसक्यूएल क्वेरी थ्योरी प्रश्न

प्रश्न: क्या मुझे 'process_date' तालिका लेनदेन तालिका या लेनदेन तालिका में 'process_date' तालिका में शामिल होना चाहिए?

+2

मैं अगर यह अलग निष्पादन की योजना में परिणाम होगा बहुत आश्चर्य होगा। –

+2

बस हमारे दो टेबल के साथ चेक किया गया। यह सटीक उसी निष्पादन योजना देता है। आपके प्रश्न का उत्तर देने के लिए, इससे कोई फर्क नहीं पड़ता। –

+0

क्या निष्पादन योजना में दक्षता के लिए सीधा सहसंबंध है? यही है कि अगर 2 योजनाएं बिल्कुल वही हैं तो निष्पादन समय बिल्कुल वही है? – Keng

उत्तर

6

यह मैं इसे कैसे

करना होगा है
SELECT <<list only columns you need>> 
FROM large_historical_transaction_table t 
WHERE EXISTS (SELECT 1 FROM OneRowTable o 
       WHERE o.last_processing_date = t.process_date) 
+0

मुझे यकीन है कि आप जानते हैं कि आप किस बारे में बात कर रहे हैं, जैसे SQLMenace और 17k का प्रतिनिधि, लेकिन पहली नज़र में, ऐसा लगता है कि बड़ी तालिका में प्रत्येक पंक्ति के लिए सहसंबंधित सबक्वायरी निष्पादित की जाएगी? – mdma

+0

+1, @ एमडीएमए, यह उस तरह से दिखता है, लेकिन यह नियमित रूप से –

+0

में शामिल होने से तेज़ है स्पष्टीकरण के लिए धन्यवाद। मुझे यह बताने में दिलचस्पी है कि यह तेज़ी से कैसे है - क्या आप इसे विस्तार से वर्णित लिंक के बारे में जानते हैं? – mdma

2

एक आंतरिक में शामिल होने के एक सममित, द्वि-दिशात्मक संबंध, सामान्य रूप में यह कोई बात नहीं है, लेकिन इस मामले में मैं शामिल होने नहीं सुझाव है, थ्रेसहोल्ड दिनांक को एक चर में पढ़ें और पैरामीटर के रूप में अन्य चयन क्वेरी को पास करें ...

2

पठनीयता के लिए मैं लेनदेन तालिका से आंतरिक रूप से शामिल होने के लिए आंतरिक रूप से इंगित करता हूं कि दिनांक के साथ दूसरी तालिका केवल फ़िल्टर की तरह कार्य करती है ।

2

टेबल में शामिल होने पर, क्वेरी ऑप्टिमाइज़र सबसे उचित शामिल कार्यान्वयन को निर्धारित करने के लिए दोनों का एक त्वरित झुकाव लेता है। तार्किक रूप से आंतरिक जुड़ना सममित है, लेकिन कार्यान्वयन बेहतर प्रदर्शन के लिए दूसरे तरफ एक पक्ष का पक्ष ले सकता है।

-2

एक क्रॉस में शामिल होने के लिए यह करना होगा:

SELECT t.col1, t.col2, p.process_date 
FROM Transactions t, Process p; 
+1

नहीं, यह नहीं होगा। यह लेनदेन से ** ** ** रिकॉर्ड वापस करेगा। यही वह नहीं है जो ओपी चाहता है। –

+1

आह, याद किया। उस स्थिति में यह सिर्फ एक आंतरिक शामिल है। सुधारों के लिए धन्यवाद। – sqlvogel

+0

यदि आप अपना उत्तर बदलते हैं तो मैं उस -1 के बारे में कुछ कर सकता हूं। – Keng

संबंधित मुद्दे