概念
数据库中索引(index)的概念与目录的概念十分类似。如果某列出现在查询的条件(where)中,而该列的数据是无序的,那么查询时只能从第一行开始一行一行地匹配。创建索引就是对某些特定列中的数据排序,生成独立的索引表。当在某列上创建索引后,如果该列出现在查询条件中,那么数据库系统会自动地引用该索引。先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可以根据ROWID快速地定位到具体的记录。当表中的数据非常多时,引用索引带来的查询效率非常可观。
在处理一个请求时,数据库可以使用可用索引有效地找到请求的行。当应用程序经常查询某一特定行或特定范围的行时,索引很有用。索引在逻辑上和物理上都独立于数据。因此,删除和创建索引对表或其他索引没有任何影响。在删除索引后,所有应用程序仍然可以继续运行。
优缺点
优点
-
大大加快数据的检索速度,这也是创建索引的主要原因。
-
可以加速表和表之间的连接。
-
索引在实现数据的参照完整性方面特别有意义,例如,在外键列上创建索引可以有效地避免死锁的发生,也可以防止当更新父表主键时,数据库对字表的全表锁定。
-
可以有效地减少磁盘I/O。
-
当使用分组GROUP BY和排序 ORDER BY字句进行数据检索时,可以显著减少查询中分组和排序的时间,大大加快数据的检索速度。
-
创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
-
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点
-
索引必须创建在表上,不能创建在视图上。
-
创建索引和维护索引要消费时间,这种时间随着数据量的增加而增加。
-
建立索引需要占用屋里空间,如果要简历聚簇索引,那么需要的空间会很大。
-
当对表中的数据进行增加、删除和更新的时候,系统必须要有额外的时间来同时对索引进行更新维护,以维持数据和索引的一致性,所以,索引降低了数据的维护速度。