मैंने जो दस्तावेज़ पढ़े हैं, उनके अनुसार, सीएलओबी या बीएलओबी के लिए डिफ़ॉल्ट भंडारण इनलाइन है, जिसका अर्थ है कि यदि यह लगभग 4k आकार से कम है तो यह तालिका में आयोजित किया जाएगा।ओरेकल 10 जी छोटे ब्लॉब या क्लोब इनलाइन स्टोर नहीं किया जा रहा है?
लेकिन जब मैं ओरेकल (10.2.0.1.0) में एक डमी टेबल पर इसका परीक्षण करता हूं तो ओरेकल मॉनिटर (ऑलराउंड ऑटोमेशन द्वारा) के प्रदर्शन और प्रतिक्रिया से पता चलता है कि यह तालिका के साथ आयोजित किया जा रहा है।
यहाँ मेरी परीक्षण परिदृश्य है ...
create table clobtest (x int primary key, y clob, z varchar(100))
;
insert into clobtest
select object_id, object_name, object_name
from all_objects where rownum < 10001
;
select COLUMN_NAME, IN_ROW
from user_lobs
where table_name = 'CLOBTEST'
;
इससे पता चलता है: Y- हाँ (सुझाव है कि ओरेकल पंक्ति में CLOB स्टोर करेगा) इस मामले में
select x, y from CLOBTEST where ROWNUM < 1001 -- 8.49 seconds
select x, z from CLOBTEST where ROWNUM < 1001 -- 0.298 seconds
तो, CLOB मूल्यों अधिकतम 30 वर्ण होंगे, इसलिए हमेशा इनलाइन होना चाहिए। यदि मैं ओरेकल मॉनिटर चलाता हूं, तो यह एक LOB.Length दिखाता है जिसके बाद प्रत्येक पंक्ति के लिए LOB.Read() लौटाया जाता है, फिर से यह सुझाव देता है कि क्लोब मान तालिका के साथ होते हैं।
मैं भी इस
create table clobtest
(x int primary key, y clob, z varchar(100))
LOB (y) STORE AS (ENABLE STORAGE IN ROW)
तरह तालिका बनाने की कोशिश की लेकिन वास्तव में एक ही परिणाम मिला है।
क्या किसी के पास कोई सुझाव है कि मैं तालिका में क्लोब वैल्यू को ऑनलाइन स्टोर करने के लिए ओरेकल को कैसे बल दे सकता हूं (मनाने, प्रोत्साहित)?
अद्यतन (मैं varchar2 स्तंभ जेड पढ़ने के लिए इसी तरह से प्रतिक्रिया समय हासिल करने की उम्मीद कर रहा हूँ): यदि मैं
select COLUMN_NAME, IN_ROW, l.SEGMENT_NAME, SEGMENT_TYPE, BYTES, BLOCKS, EXTENTS
from user_lobs l
JOIN USER_SEGMENTS s
on (l.Segment_Name = s. segment_name)
where table_name = 'CLOBTEST'
तो यह एसक्यूएल चलाने मैं निम्नलिखित परिणाम ...
Y YES SYS_LOB0000398621C00002$$ LOBSEGMENT 65536 8 1
यदि मैं आपको और अधिक बढ़ा सकता हूं तो मैं यह एक शानदार प्रतिक्रिया होगी –