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

सत्र बदलें हाइबरनेट के माध्यम से क्वेरी को धीमा कर देता है

UPPER() और BINARY_CI समान परिणाम दे सकते हैं लेकिन Oracle उनका परस्पर उपयोग नहीं कर सकता है। किसी अनुक्रमणिका और BINARY_CI का उपयोग करने के लिए आपको इस प्रकार एक अनुक्रमणिका बनानी होगी:

create index src_nlssort_index on src(nlssort(b, 'nls_sort=''BINARY_CI'''));

नमूना तालिका और मिश्रित केस डेटा

create table src(b varchar2(100) not null);
insert into src select 'MiXeD CAse '||level from dual connect by level <= 100000;

डिफ़ॉल्ट रूप से अपर () विधेय ऊपरी () इंडेक्स पर रेंज स्कैन कर सकता है

create index src_upper_index on src(upper(b));

explain plan for
select * from src where upper(b) = 'MIXED CASE 1';

select * from table(dbms_xplan.display(format => '-rows -bytes -cost -predicate 
    -note'));

Plan hash value: 1533361696

------------------------------------------------------------------
| Id  | Operation                   | Name            | Time     |
------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                 | 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| SRC             | 00:00:01 |
|   2 |   INDEX RANGE SCAN          | SRC_UPPER_INDEX | 00:00:01 |
------------------------------------------------------------------

BINARY_CI और LINGUISTIC अनुक्रमणिका का उपयोग नहीं करेंगे

alter session set nls_sort='binary_ci';
alter session set nls_comp='linguistic';

explain plan for
select * from src where b = 'MIXED CASE 1';

select * from table(dbms_xplan.display(format => '-rows -bytes -cost -note'));

Plan hash value: 3368256651

---------------------------------------------
| Id  | Operation         | Name | Time     |
---------------------------------------------
|   0 | SELECT STATEMENT  |      | 00:00:02 |
|*  1 |  TABLE ACCESS FULL| SRC  | 00:00:02 |
---------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(NLSSORT("B",'nls_sort=''BINARY_CI''')=HEXTORAW('6D69786564
              2063617365203100') )

NLSSORT पर फ़ंक्शन आधारित इंडेक्स () इंडेक्स रेंज स्कैन को सक्षम बनाता है

create index src_nlssort_index on src(nlssort(b, 'nls_sort=''BINARY_CI'''));

explain plan for
select * from src where b = 'MIXED CASE 1';

select * from table(dbms_xplan.display(format => '-rows -bytes -cost -note'));

Plan hash value: 478278159

--------------------------------------------------------------------
| Id  | Operation                   | Name              | Time     |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                   | 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| SRC               | 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | SRC_NLSSORT_INDEX | 00:00:01 |
--------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access(NLSSORT("B",'nls_sort=''BINARY_CI''')=HEXTORAW('6D69786564
              2063617365203100') )


  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. कम से कम दो तिथियों का चयन करें

  3. स्कैला/जावा का उपयोग करके संग्रहित प्रक्रिया ऑरैकल पैरामीटर सरणी को कॉल करें

  4. एकल क्वेरी का उपयोग करके एकाधिक तालिका स्तंभ मान अपडेट करें

  5. जांचें कि पैरामीटर WHERE क्लॉज के भीतर NULL है या नहीं