मेरे पास एक कथन है जो ओरेकल डेटाबेस सर्वर पर चलता है। बयान में लगभग 5 शामिल हैं और वहां कुछ भी असामान्य नहीं है। यह काफी नीचे दिखाई देता है:ओरेकल संकेत प्रदर्शन को सुधारने के लिए ओरेकल संकेत "FIRST_ROWS" का उपयोग करना
SELECT field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
समस्या (और क्या दिलचस्प है) उपयोगकर्ता आईडी के लिए है कि बयान है = 1 1 सेकंड लेता है 590 रिकॉर्ड वापस जाने के लिए। उपयोगकर्ता आईडी = 2 के लिए वक्तव्य 70 रिकॉर्ड वापस करने के लिए लगभग 30 सेकंड लेता है।
मुझे समझ में नहीं आता कि अंतर इतना बड़ा क्यों है।
ऐसा लगता है कि अलग अलग कार्य योजना लागू करके userid = 1 और उपयोगकर्ता आईडी के लिए अलग से बयान के लिए चुना जाता है = 2.
बाद मैं Oracle सुझाव FIRST_ROW, प्रदर्शन में काफी बेहतर हो कार्यान्वित किया। दोनों कथन (आईडी 1 और 2 दोनों के लिए) 1 सेकंड से कम में वापसी करते हैं।
SELECT /*+ FIRST_ROWS */
field1, field2, field3, ...
FROM table1, table2, table3, table4, table5
WHERE table1.id = table2.id AND table2.id = table3.id AND ...
table5.userid = 1
सवाल:
1) क्या हैं खराब प्रदर्शन के लिए संभावित कारणों जब उपयोगकर्ता id = 2 (जब संकेत नहीं किया जाता है)?
2) एक बनाम दूसरे कथन के लिए निष्पादन योजना अलग क्यों होगी (जब संकेत का उपयोग नहीं किया जाता है)?
3) क्या ऐसी कोई चीज है जो मुझे अपने प्रश्नों में इस संकेत को जोड़ने का निर्णय लेने के बारे में सावधान रहना चाहिए?
धन्यवाद
क्या आपके टेबल आंकड़े अद्यतित और सटीक हैं? – Tebbe
प्रदर्शन तुलना चलाने पर कैशिंग के बारे में सावधान रहें। – tbone
Tebbe - सांख्यिकी अद्यतित हैं। क्या वे सटीक हैं, मुझे नहीं पता। – bobetko