索引的认识
索引有B-TREE、BIT、CLUSTER等类型。ORACLE使用了一个复杂的自平衡B-tree结构;通常来说,在表上建立恰当的索引,查询时会改进查询性能。但在进行插入、删除、修改时,同时会进行索引的修改,在性能上有一定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根据索引内容和查询条件,查询出ROWID,再根据ROWID取出需要的数据。由于索引内容通常比全表内容要少很多,因此通过先读索引,能减少I/O,提高查询性能。
使用索引注意的问题
通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:
基于一个范围的检索,一般查询返回结果集小于表中记录数的30%宜采用;
基于非唯一性索引的检索
索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同。