索引的原理
- 索引类似字典检索。
- 用户使用字典时,可以通过检索目录来获得目标所在页数,然后直接在该页获得查找目标。
- 在数据表的某列上简历了索引,oracle将另辟新的空间,以存储该列上所有值与其记录的rowid的对应关系,当用户试图以索引列作为搜索条件时,oracle将利用索引来获得相应的rowid,并捕获该记录。
创建索引语法
create index [indexname] on [tabelname][(columnname)]
eg:create index idx_people_name on people(name)
使用索引查询的效果
例子:
select * from people order by id
ID | NAME | STATUS |
---|---|---|
1 | James | ACT |
2 | John | ACT |
3 | Robert | ACT |
4 | Michael | ACT |
5 | William | ACT |
6 | David | ACT |
7 | Richard | ACT |
8 | Charles | ACT |
9 | Joseph | ACT |
10 | Thomas | ACT |
此时如果select * from people where name ='David'
- 一般查询
将执行全表扫描,当搜索到第6条记录的时候,会发现该记录符合条件,纳入结果集合,但是搜索不会停止,因为数据库并不知道后面的记录是否还有符合条件的记录,直至整个表都搜索完成,才会返回最终结果 - 使用索引
表中的所有数据将按照字母表顺序进行分块处理,假如分成两个块
C | M |
---|---|
Charles,David,James,John,Joseph | Michael,Richard,Robert,Thomas,William |
此时,oracle只会在第一个数据块中搜索,并且当搜索到David之后,如果下一条记录的name不是David,oracle将停止搜索,并获得其对应的rowid,根据rowid快速定位该记录。