1. Primary Index
-
Created automatically when you create a table in SE11.
-
Based on the primary key fields of the table.
-
Always unique.
-
Cannot be deleted.
-
Used whenever you do a
SELECT ... WHEREon the primary key.
Example:
For table MARA, the primary index is on MATNR (Material Number).
SELECT * FROM mara WHERE matnr = ‘MAT001’.
2. Secondary Index
-
Created manually in SE11 (or SE14) for performance optimization.
-
Can be unique or non-unique.
-
Useful when you frequently query on non-primary key fields.
-
Stored in the database dictionary as
Zindexes (MARA~Z01, etc.). -
Too many indexes = bad performance on
INSERT/UPDATE/DELETE(because index maintenance consumes resources).
Example:
If you often query MARA by MTART and MBRSH, you might define a secondary index on those fields.
3. Unique Index
-
Ensures that no duplicate values exist for the indexed fields.
-
Primary indexes are always unique, but you can also define unique secondary indexes.
Example:
On MARC, you might create a unique secondary index on (MATNR, WERKS) to ensure material–plant combination is unique.
4. Non-Unique Index
-
Allows duplicate values for the indexed fields.
-
Used mainly for improving performance, not data consistency.
5. Bitmap Index (special, DB-dependent)
-
In SAP on Oracle, bitmap indexes may be created automatically for fields with low cardinality (few distinct values, e.g., “Gender”).
-
Rarely created manually in ABAP Dictionary, but worth knowing.
Summary table:
| Index Type | Created By | Based On | Uniqueness | Example |
|---|---|---|---|---|
| Primary | Auto | Primary Key | Unique | MARA~MATNR |
| Secondary | Manual | Any fields | Unique / Non-Unique | MARA~Z01 on MTART+MBRSH |
| Unique | Manual | Any fields | Unique only | MARC~MATNR+WERKS |
| Non-Unique | Manual | Any fields | Duplicates allowed | Index on MTART |
| Bitmap | DB-specific | Low-cardinality fields | Depends | Oracle-specific |