一:索引基本概念
oracle提供了两种方式,从表中读取所有行(即全表扫描),或者通过ROWID一次读取一行;
如果只访问大数据量表的5%的行,并且使用索引标识需要读取的数据块,这样花费的 I/O 较少,索引对性能的改进程度: 1.取决于数据的选择性 2.数据在表的数据块中的分步方式;
当数据分散在表的多个数据块时,最好是不使用索引,而是使用全表扫描,执行全表扫描时,oracle使用多块读取以快速扫描表,基于索引的读是单块读,因此在使用索引时的目标是减少完成查询所需的单块读的数量;
增强索引会降低 insert 语句的性能(因为需要同时对表和索引进行更新),大量行的 delete 操作,将会由于表中存在索引而变慢;
在SQL中有许多陷阱会使一些索引无法使用:
1.使用不等于运算符(NOT、<>)
索引只能查找表中已存在的数据,每当在 where 子句中使用不等于运算符时,其中被用到的列上的索引都将无法使用;例如:select cust_id, cust_name from customers where cust_rating <> 'aa'; oracle在分析表的同时收集数据分布的相关统计信息,通过这种方法,基于成本的优化器可以决定在where子句中对一些值使用索引,而对其他值不使用索引;
可以使用 create index 命令的 compute statistic 子句,在创建索引的同时分析它们;
2.使用 IS NULL
当在whe