oracle中的索引:

oracle中的索引:,oracle,Oracle,以下哪项是创建索引的最佳方法,以便我的查询提供更快的结果 我的问题是: select emp_name,emp_last_name, salary from employees_table where salary <=2000; 1. create index emp_index on employees_table (salary); 2. create index emp_index on employees_table (emp_name,emp_last_name,sal

以下哪项是创建索引的最佳方法,以便我的查询提供更快的结果

我的问题是:

select emp_name,emp_last_name, salary 
from employees_table 
where salary <=2000;

1. create index emp_index on employees_table (salary);

2. create index emp_index on employees_table (emp_name,emp_last_name,salary);
原则上,在emp_表emp_name、emp_last_name、salary上创建索引emp_index;最好是这样,因为对于您的查询,Oracle必须只读取索引,而不读取任何表数据


但是,这意味着您要为每个特定的查询创建一个单独的索引,这无疑是一种过度使用。

对于2个索引,Oracle可能会选择“表访问完全”,如果索引的第一列中的disctinct值过多,Oracle会给您提供表访问完全,若索引的第一列中的不同值不多,那个么您将给出索引跳过扫描

对于第一个索引,您将看到“索引范围扫描”+“按rowid访问表”

但对于这两个索引,如果sql返回的行数大于5-7%,那么Oracle可能希望使用“表访问完整”


所有这一切都取决于您在表和计数返回行中的数据,以及您的意见,您认为哪个索引更好,为什么?在我看来,它将是第二个索引,因为如果只对薪资列进行索引,sqlengine将只能访问薪资字段,但要访问其他数据,它必须搜索表。回答得好。从这两个IDEX中,数字2优于1-st。这样的索引称为。然而,对于这个具体的查询,仍然有一个更好的选项3->在employees\u表salary、emp\u name、emp\u last\u name;上创建索引emp\u index;。请注意,它与2几乎相同,只是列的顺序不同。。。你知道为什么它更好吗?1或2都可能更好,在选择索引时没有最好的方法。