索引
索引的创建语句
- 单列索引
create index 索引名 on 表名(列名)
- 多列索引
create index 索引名 on 表名(列名1,列名2....)
- 删除索引
Drop index 索引名
- 查看某个表中的所有的索引
select * from all_indexs where table_name='表名'
- 查看某个表中建立索引的所有列
select * from all_ind_columns where table_name='表名'
索引的优缺点:
- 优点
- 很大的提高了数据的检索速度
- 创建唯一索引能保证数据库表中的每一行数据的唯一性。
- 提高了表与表之间的连接速度
- 缺点
- 索引需要占用物理控件
- 当对表中的数据进行增删改的时候,索引也需要动态的维护,降低数据的维护速度。
查询优化器:
当Oracle拿到SQL语句的时候,会使用查询优化器去分析该语句,并根据分析结果生成查询执行计划。也就是说,数据库是执行的查询计划,而不是SQL语句。
查询优化器有RBO
(Rule-Based-Optimizer,基于规则的查询优化器)和CBO
(Cost-Based-Optimizer,基于成本的查询优化器),其中基于规则的查询优化器在10g的版本中彻底消失了。原因是因为RBO最后的查询都是全表扫描,而CBO会根据统计信息选择最优的查询方案。
因此,CBO一旦发现有索引的存在,并且这个索引能帮助提高查询速度,就是使用通过索引进行查询的方法。