While creating a composite index in the oracle database, got
SQL> create index EMP_TAB_IDX1 on EMP_TAB ( EMPNAME,LOCATION,DEPT);
create index EMP_TAB_IDX1 on EMP_TAB ( EMPNAME,LOCATION,DEPT)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
PROBLEM:
SQL> create index EMP_TAB_IDX1 on EMP_TAB ( EMPNAME,LOCATION,DEPT);
create index EMP_TAB_IDX1 on EMP_TAB ( EMPNAME,LOCATION,DEPT)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
SOLUTION:
As per oracle documentation – For a database with block size of 8K , Index length can be maximum of 6398.
What is index length then?
Lets describe the table
SQL> desc EMP_TAB Name Null? Type ----------------------------------------- -------- ------------------- EMPNO NUMBER EMPNAME VARCHAR2(3000) LOCATION VARCHAR2(3000) DEPT VARCHAR2(2000)
Here we are trying to create composite index on empname varchar2(3000) , location varchar2(3000) , dept varchar2(2000).
If we add the length 3000+3000+2000=9000 > 6398 . It is greater than the allowed value.
So to avoid this error, either we have to create the index with length less than 6398 . Else we can create a tablespace with higher block size value( like 16k/32k) and create the index in that tablespace .
SQL> create index EMP_TAB_IDX1 on EMP_TAB ( EMPNAME,LOCATION);
Index created.
Above index creation worked, because 3000 + 3000 < 6398 .