मेरे पास WHERE NOT EXISTS
खंड के साथ एक बहुत ही सरल SELECT *
क्वेरी है।चयन 100ms लेता है; चयन के रूप में तालिका बनाएं - या - INSERT चुनने में 15 मिनट
SELECT *
FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT_TABLE
WHERE NOT EXISTS (SELECT * FROM "BMAN_TP3"."USER_DEF_ATTRIBUTES" EXISTS_TABLE
WHERE "SELECT_TABLE"."UDA_NAME" = "EXISTS_TABLE"."UDA_NAME")
यह प्रश्न निष्पादित करने और < 2000 रिकॉर्ड निष्पादित करने के लिए 100 एमएस के बारे में यह प्रश्न।
इस क्वेरी एक CREATE TABLE AS
में या एक INSERT INTO
में नीडिंत है यदि यह 15 मिनट में चलता है।
CREATE TABLE BMAN_TP3.TT_UDA_TEST TABLESPACE BMAN_TP3_U AS (
SELECT *
FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT_TABLE
WHERE NOT EXISTS (SELECT * FROM "BMAN_TP3"."USER_DEF_ATTRIBUTES" EXISTS_TABLE
WHERE "SELECT_TABLE"."UDA_NAME" = "EXISTS_TABLE"."UDA_NAME")
)
मैं दोनों USER_DEF_ATTRIBUTES
(वैकल्पिक कुंजी) के क्षेत्र एक UNIQUE INDEX
UDA_NAME
पर और TT_SPLDR_55E63A28_59358
टेबल है।
यदि मैं WHERE NOT EXISTS
को हटा देता हूं तो इसमें आधे सेकेंड लगते हैं।
संपादित करें:
अगर मैं
LEFT OUTER JOIN "BMAN_TP3"."USER_DEF_ATTRIBUTES"
ON "SELECT_TABLE"."UDA_NAME" = "USER_DEF_ATTRIBUTES"."UDA_NAME"
WHERE "USER_DEF_ATTRIBUTES"."UDA_NAME" IS NULL
WHERE NOT EXISTS
के बजाय
का उपयोग यह आधे सेकंड में चलता है।
मैं समझा नहीं सकता कि WHERE NOT EXISTS
इतनी धीमी क्यों है! टेबल बनाने के लिए साथ जहां मौजूद नहीं
व्याख्या: (15 मिनट) वाम बाहरी के साथ के रूप में टेबल बनाएं लिए
व्याख्या में शामिल हों: (500 एमएस)
केवल के साथ कहां मौजूद नहीं है का चयन के लिए समझाएं: (100ms)
केवल वाम बाहरी के साथ चयन के लिए व्याख्या में शामिल हों: (100ms)
यह ऐसा लगता है कि इसे चुनने पर एक ही ऑपरेशन होता है, लेकिन तालिका बनाते समय यहके लिए अलग-अलग संचालन करता हैऔर LEFT OUTER JOIN
['EXPLAIN'] (http://docs.oracle.com/cd/B19306_01/server.102/b14211/ex_plan.htm) क्या कहता है? –
@ बुरहानखिद – Teejay
से ऊपर मेरी पोस्ट देखें कृपया बाएं बाहरी जॉइन मामले के लिए व्याख्या योजना जोड़ें। धन्यवाद। –