Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Phiên thay thế làm chậm truy vấn thông qua Hibernate

UPPER () và BINARY_CI có thể tạo ra các kết quả giống nhau nhưng Oracle không thể sử dụng chúng thay thế cho nhau. Để sử dụng một chỉ mục và BINARY_CI, bạn phải tạo một chỉ mục như sau:

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

Bảng mẫu và dữ liệu trường hợp hỗn hợp

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

Theo mặc định, vị từ trên () có thể thực hiện quét phạm vi đối với chỉ mục trên ()

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 và LINGUISTIC sẽ không sử dụng chỉ mục

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') )

Chỉ mục dựa trên hàm trên NLSSORT () cho phép quét phạm vi chỉ mục

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. Làm thế nào để gửi các tham số tùy ý đến trình kích hoạt Oracle?

  2. Chèn vào Oracle và truy xuất ID trình tự đã tạo

  3. Tính toán dấu thời gian với thời gian tiết kiệm ánh sáng ban ngày

  4. PRVG-2027 Chủ sở hữu tệp không nhất quán giữa các nút

  5. Nhà tiên tri. Thiếu từ khóa khi sử dụng câu lệnh viết hoa. Lỗi 00905