网站最佳颜色搭配,建立网站后台,wordpress persona,网站被备案能建设在Oracle中可以创建组合索引#xff0c;即同时包含两个或两个以上列的索引。在组合索引的使用方面#xff0c;Oracle有以下特点#xff1a; 1、 当使用基于规则的优化器#xff08;RBO#xff09;时#xff0c;只有当组合索引的前导列出现在SQL语句的where子句中时#…在Oracle中可以创建组合索引即同时包含两个或两个以上列的索引。在组合索引的使用方面Oracle有以下特点 1、 当使用基于规则的优化器RBO时只有当组合索引的前导列出现在SQL语句的where子句中时才会使用到该索引 2、 在使用Oracle9i之前的基于成本的优化器CBO时 只有当组合索引的前导列出现在SQL语句的where子句中时才可能会使用到该索引这取决于优化器计算的使用索引的成本和使用全表扫描的成本Oracle会自动选择成本低的访问路径 3、 从Oracle9i起Oracle引入了一种新的索引扫描方式——索引跳跃扫描index skip scan这种扫描方式只有基于成本的优化器CBO才能使用。这样当SQL语句的where子句中即使没有组合索引的前导列并且索引跳跃扫描的成本低于其他扫描方式的成本时Oracle就会使用该方式扫描组合索引 4、 Oracle优化器有时会做出错误的选择因为它再“聪明”也不如我们SQL语句编写人员更清楚表中数据的分布在这种情况下通过使用提示hint我们可以帮助Oracle优化器作出更好的选择。
1.创建语句
CREATE INDEX index_name ON table_name (column1, column2, ...);
在Oracle数据库中复合索引是基于多个列创建的索引。当查询语句中的WHERE子句条件使用了复合索引中的列并且满足一定的条件时Oracle的优化器 会选择使用这个复合索引来提高查询性能。
2. 应用规则
要使复合索引被使用查询中的条件需要满足以下规则
最左前缀规则复合索引中的列必须按照索引创建时的顺序出现在查询条件中且从左到右不能跳过任何列。
例如如果有一个复合索引是基于列(A, B, C)创建的那么以下查询条件可以利用这个索引
WHERE A :value
WHERE A :value AND B :value2
WHERE A :value AND C :value3
WHERE A :value AND B :value2 AND C :value3
但以下查询条件则不会使用这个索引
WHERE B :value2缺少A列
WHERE A :value AND C :value3跳过了B列
3. 解释说明
选择性索引列的选择性越高索引被使用的可能性越大。选择性是指不同值的数量与表中总行数的比值。具有高选择性的列即列中的值分布较为均匀通常更能受益于索引。统计信息Oracle的优化器依赖于统计信息来决定是否使用索引。如果统计信息不准确或过时优化器可能不会选择最优的执行计划。因此需要定期收集和维护表还有索引的统计信息。查询优化器的决策当查询条件满足复合索引的使用规则查询优化器也可能出于其他原因如成本估算、执行计划的选择等而决定不使用索引。