一、索引类型选择原则
根据查询需求选择合适的索引类型是优化性能的基础。B-Tree索引(默认类型)适用于等值查询、范围查询和排序操作,是大多数场景的首选;位图索引适合低基数列(如性别、部门状态等,取值少且重复值多),能有效减少空间占用;函数索引针对频繁进行函数操作的列(如UPPER(name)、TO_DATE(create_time)),可避免查询时对列数据进行函数计算;覆盖索引包含查询中所有需要的列,无需回表访问数据,显著提升查询效率。
二、索引列选择原则
(department_id, salary),查询WHERE department_id=10或WHERE department_id=10 AND salary>5000可使用索引,但仅WHERE salary>5000则无法使用。update_time)上建索引,会增加DML操作的开销;避免在NULL值多的列上建索引(Oracle索引不存储NULL值),无法发挥索引作用。三、索引使用避免原则
WHERE UPPER(name)='JOHN'、WHERE salary+100>2000),会导致索引失效;避免使用IS NULL、IS NOT NULL(Oracle无法利用索引定位NULL值);避免使用!=或NOT IN(索引无法处理“不存在”的逻辑);避免在索引列上进行隐式类型转换(如字符型列WHERE emp_type=123,Oracle会转换为WHERE TO_NUMBER(emp_type)=123,导致索引失效)。USER_INDEXES视图监控索引使用情况)。四、索引维护原则
ALTER INDEX index_name REBUILD命令重建索引,回收碎片并优化存储结构。V$OBJECT_USAGE视图,监控索引的使用频率、扫描次数等指标,及时删除未使用或使用率低的索引。INITIAL 1M NEXT 1M),避免频繁扩展导致的性能波动。五、特殊场景索引原则
ALTER INDEX ... REBUILD PARTITION ... PARALLEL命令并行重建分区索引,缩短维护时间。WHERE UPPER(name)='JOHN'),创建函数索引(CREATE INDEX idx_upper_name ON employees(UPPER(name))),可避免查询时对列数据进行函数计算,提升查询性能。