Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle:शर्त के साथ पूर्ण पाठ खोज

Oracle टेक्स्ट

1 - आप FILTER BY के साथ CONTEXT अनुक्रमणिका बनाकर प्रदर्शन में सुधार कर सकते हैं:

create index my_idx on my_table(text) indextype is ctxsys.context filter by group_id;

मेरे परीक्षणों में filter by निश्चित रूप से प्रदर्शन में सुधार हुआ, लेकिन group_id पर btree अनुक्रमणिका का उपयोग करना अभी भी थोड़ा तेज़ था।

2 - सीटीएक्ससीएटी इंडेक्स "सब-इंडेक्स" का उपयोग करते हैं, और ऐसा लगता है कि मल्टी-कॉलम इंडेक्स के समान काम करता है। ऐसा लगता है कि यह विकल्प (4) है जिसे आप ढूंढ रहे हैं:

begin
  ctx_ddl.create_index_set('my_table_index_set');
  ctx_ddl.add_index('my_table_index_set', 'group_id');
end;
/

create index my_idx2 on my_table(text) indextype is ctxsys.ctxcat
    parameters('index set my_table_index_set');

select * from my_table where catsearch(text, 'blah', 'group_id = 43') > 0

यह संभवतः सबसे तेज़ तरीका है। आपके ए और बी परिदृश्य के समान 120 एमबी यादृच्छिक पाठ के खिलाफ उपरोक्त क्वेरी का उपयोग करने के लिए केवल 18 सुसंगत हो जाता है। लेकिन नकारात्मक पक्ष पर, CTXCAT इंडेक्स बनाने में लगभग 11 मिनट लगे और 1.8GB स्थान का उपयोग किया।

(नोट:ओरेकल टेक्स्ट यहां सही ढंग से काम करता प्रतीत होता है, लेकिन मैं टेक्स्ट से परिचित नहीं हूं और मैं यह सुनिश्चित नहीं कर सकता कि यह इन इंडेक्स का अनुचित उपयोग नहीं है जैसे @NullUserException ने कहा।)

मल्टी-कॉलम इंडेक्स बनाम इंडेक्स जॉइन

आपके द्वारा अपने संपादन में वर्णित स्थिति के लिए, सामान्य रूप से (ए, बी) पर एक इंडेक्स का उपयोग करने और ए और बी पर अलग-अलग इंडेक्स में शामिल होने के बीच कोई महत्वपूर्ण अंतर नहीं होगा। मैंने आपके द्वारा वर्णित डेटा के साथ कुछ परीक्षण किए और एक इंडेक्स में शामिल होने के लिए केवल 7 सुसंगत हो जाता है बनाम 2 सुसंगत हो जाता है बहु-स्तंभ अनुक्रमणिका के लिए।

इसका कारण यह है कि Oracle ब्लॉकों में डेटा को पुनः प्राप्त करता है। एक ब्लॉक आमतौर पर 8K होता है, और एक इंडेक्स ब्लॉक पहले से ही सॉर्ट किया जाता है, इसलिए आप शायद कुछ ब्लॉक में 500 से 2000 मान फिट कर सकते हैं। यदि आप प्रदर्शन के बारे में चिंतित हैं, तो आमतौर पर आईओ को पढ़ने और लिखने के लिए ब्लॉक ही एकमात्र चीज है जो मायने रखती है। Oracle को कुछ हज़ार पंक्तियों को एक साथ जोड़ना है या नहीं, यह CPU समय की एक अप्रासंगिक राशि है।

हालाँकि, यह Oracle टेक्स्ट इंडेक्स पर लागू नहीं होता है। आप एक btree अनुक्रमणिका ("बिटमैप और"?) के साथ एक CONTEXT अनुक्रमणिका में शामिल हो सकते हैं, लेकिन प्रदर्शन खराब है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सूची डेटा प्रयोग करने योग्य प्रारूप में?

  2. Oracle में एकाधिक प्रतिस्थापन फ़ंक्शन

  3. अनुगामी शून्य

  4. एसक्यूएल में डेटा का अनुवाद करने के लिए कोई फ़ंक्शन है?

  5. Oracle:फ़ंक्शन आधारित अनुक्रमणिका चयनात्मक विशिष्टता