- 首页 >
- 问答 >
-
云计算 >
- Ubuntu Oracle索引创建原则是什么
Ubuntu Oracle索引创建原则是什么
小樊
38
2025-12-28 12:27:59
Ubuntu上Oracle索引创建原则
一 核心原则
- 索引的取舍基于代价:在大表上,若查询需要返回的行数少于约15%,通常值得建索引;该阈值会随表扫描速度与数据聚集度变化。小表一般无需索引。为提升多表连接性能,应对连接列建立索引;主键、唯一键会自动创建索引,必要时可为外键单独建索引。索引越多,DML(INSERT/UPDATE/DELETE)维护成本越高,需在查询性能与写入性能间权衡。选择性高(值分布广)的列更适合建索引。
二 索引类型与适用场景
- B-Tree:通用索引,适合等值查询与范围查询,是大多数场景的首选。
- 位图索引:适合低基数(中低不同值数量)列,且在数据仓库/报表场景(批量加载、复杂条件组合)表现优异;不建议在高并发OLTP环境使用,因为锁粒度较大影响并发。
- 函数索引/表达式索引:当查询对列有函数或表达式运算时,可通过函数索引让查询走索引。
- 虚拟列索引:可在虚拟列上创建唯一或非唯一索引,其效果等同于函数索引。
三 列选择与复合索引设计
- 适合建索引的列特征:值相对唯一、取值范围广(利于B-Tree)、或取值范围小(利于位图);列中大量NULL但查询常检索“非NULL”值时也可考虑索引;注意LONG、LONG RAW类型不可建索引。
- 不适合建索引的列特征:大量NULL且从不查询非NULL;选择性很差且数据分布不倾斜的列(收益有限)。
- 复合索引列顺序:将最常用列置于最左;若使用频度相近,优先将选择性更高的列放在前面;遵循最左前缀原则,查询条件包含前导列才能高效利用索引。
- NULL与表达式处理:若需查找非NULL,可用如“WHERE COL_X > -9.99 * POWER(10,125)”的形式以利用索引(对数值列);避免在索引列上直接使用函数,必要时改用函数索引。
四 创建与维护的实用准则
- 批量加载策略:对大批量导入,优先采用先导入后建索引;或使用SQL*Loader 直接路径加载并在加载过程中创建索引以提升效率。
- 存储与空间:预估索引大小并设置存储参数与合适的表空间;将表与索引分表空间可减轻I/O争用,但需权衡可用性(任一离线可能影响引用语句)。
- 创建性能:对大索引可使用并行创建(PARALLEL)与NOLOGGING以减少重做日志与创建时间;使用NOLOGGING后务必及时备份。
- 索引可用性控制:测试或批量加载阶段可使用不可见索引(优化器不可见)或不可用索引(不被DML维护)以灵活控制计划与性能。
- 维护与清理:定期监控索引使用,删除不再使用的索引;对是否合并/重建索引进行代价收益评估,避免频繁重建。
五 监控与验证
- 识别使用与冗余:利用Oracle提供的索引使用监控功能,识别未被查询使用的索引并清理;在删除或禁用主键/唯一键约束前,评估相关索引的成本与影响。
- 执行计划验证:通过EXPLAIN PLAN或SQL执行计划工具核对索引是否被正确使用,必要时结合AWR/ADDM等性能报告做持续优化。