索引的级数越多,访问速度不一定越快。
举例子记忆:就好像是字典的目录结构一样,如果目录比你的字典内容还大,你觉得能好吗?
换位思考,假如内容就10页,而目录用了500页,那么就相当于索引级数(500页)越多,
但是访问速度肯定是很慢的,本来10页,我手翻都能翻完,结果索引的级数太多了,访问了半天才找到。
总结:还要看数据量是否大。
关于索引的使用要注意几个事项 :
1 首先数据量小的表不需要建立索引,因为小的表即使建立索引也不会有大的用处,还会增加额外的索引开销
2 不经常引用的列不要建立索引,因为不常用,即使建立了索引也没有多大意义
3 经常频繁更新的列不要建立索引,因为肯定会影响插入或更新的效率
思考:表中建立了索引后,导入大量数据为什么会慢?或者说表中建立索引后,为什么更新数据会很慢?
答:对已经建立了索引的表中插入数据时,插入一条数据就要对该记录【按索引排序】。因此,导入大量数据的时候速度会很慢。
解决办法:在没有任何索引的情况下插入数据,然后再建立索引。
而更新就无法避免了。就像3说的一样,经常更新的列就不要建立索引。
举例子:【们】字插入字典里,首先,【们】这个单词要找到【单人旁】,在找到【门】,然后找到页码,然后再插入或更新进去,这就叫【按索引排序】。
4 索引并不是一劳永逸的,用的时间长了需要进行整理或者重建。
初学者在Oracle中使用索引,可以使用EM的建议(EM的Advisor Central中找SQL Access Advisor)
注意:有时候查询语句中的索引没有发挥作用,这又是为什么呢?
答:在很多情况下,虽然查询语句使用了索引,但是索引并没有发挥作用。
例如:在WHERE条件的LIKE关键字匹配的字符串以”%“开头,这种情况下,索引是不会起到作用的;
WHERE条件中使用OR关键字来连接多个查询条件,如果有一个条件没有使用索引,那么其他的索引也不会起作用;
多列索引的第一个字段没有使用,那么这个多列索引也不会起作用。
解决办法:根据这些情况,必须对这些语句进行相应的优化。