在开始,只知道在大部分情况下,使用索引能够提升效率,但是对他的原理还是不了解,现在进行笔记记录:
1.索引是中的一类对象,在创建完成后,跟表一样需要占用磁盘空间;
2.索引在创建时,数据库会对创建索引字段进行全表扫描,并进行属性排序(字母升序排序),然后将字段值与字段值所对应的rowid进行一一对应,创建索引条目,当我们查询某个值时,直接找到该值所对应的rowid,再显示该rowid对应的行数据;
3.索引是一种树状结构数据,能过快速的查询需要查询的字段,可以参考二叉树排序的思路;
索引创建的原则:
1.先考虑该表是否进行大量查询操作,还是进行大量增删改操作,进行大量的增删改操作会重建索引,消耗一些时间;
2.字段中重复数据是否太多,例如性别字段,重复值太多,适用于创建位图缩索引,一般字段适用与创建b树索引;
3.在关联条件字段创建索引,在group by 字段创建索引,都能过进行很好的提升效率;
4.数据数据的变化,索引的效率会下降,因此应定期重建索引;
5.主外键上创建索引;
索引失效的情况:
1.where 条件中索引列字段进行 is null 、is not null 进行判断,索引失效,进行全表扫描;
2.where 条件中索引字段进行不等式操作,<>, !=, not colum >= , not colum <= (< \、> 有时起作用,有时不起索引);
3.索引字段进行运算,例如 where id-1 = 234 ;
4.索引字段进行函数操作,例如where substr(id,1,2) = ‘234’;
5.索引字段进行后导模糊查询,例如 where name like ‘%e’ ,where name like ‘e%’索引不会失效;
6.索引字段进行隐式转换,例如数值类型与字符串类型进行判断;
重建索引的方式
1.索引暂时失效:alter index index_name unusable;在进行大表数据导入时,先让索引失效,数据导入完再重建索引;
2.重建索引:a. alter index index_name rebuild;
b.先drop index 后create index
说明:两种方式都是先删除索引,再创建索引,但是效率上a方式比较高