SQL索引

Posted xing柠檬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL索引相关的知识,希望对你有一定的参考价值。

1.什么是索引?作用?

     索引相当于 一本书的目录,通过目录(索引)可以快速的找到对应的资源。

     在数据库中,查询一张表的时候有两种方式:

             第一种:全表扫描

             第二种:根据索引检索(效率最高)

      索引提高检索效率的根本原理是:缩小了扫描的范围。

       正确的使用索引可以提高检索效率,但是随意的添加索引是不被允许的,因为索引也是数据库中的对象,也需要数据库的不断维护,如果表中的数据经常被修改那么该数据就不适合添加索引,因为数据一旦修改,索引就需要进行重新排序,进行维护,维护的成本也会提高。

        添加索引是给某一个字段,或者说某些字段添加索引

        不使用索引:select ename,sal from emp where ename=\'JAMES\';

        使用explain查看select ename,sal from emp where ename=\'JAMES\';的执行计划。

        explain select ename,sal from emp where ename=\'JAMES\';
          

       当ename字段上没有添加索引的时候,以上sql语句会进行全表扫描,扫描ename字段中所有的值。

       使用索引:首先创建索引   create index 名称 on 表名(字段名)

                                                  create index emp_ename_index on emp(ename);

       使用explain查看select ename,sal from emp where ename=\'JAMES\';的执行计划。

        explain select ename,sal from emp where ename=\'JAMES\';

         

 

 

         当ename字段上添加了索引的时候,以上sql语句会根据索引扫描,快速定位。

2.考虑添加索引的情况
    *数据量庞大(根据客户的需求,根据线上的环境)

    *该字段的DML操作很少(因为字段进行修改操作,索引也需要维护)

    *该字段经常出现在where子句中

注意:主键和具有unique约束的字段自动会添加索引。根据主键的查询效率较高。尽量根据主键查询。

3.创建索引对象,删除索引对象

    创建:create index 索引名称 on 表名(字段名);

    删除:drop index 索引名称 on 表名;

4.索引底层采用的数据结构是:B+Tree

5.索引的实现原理:

    通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过所以检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。

 

 

6.索引的分类:

单一索引:给单个字段添加索引

符合索引:给多个字段联合起来添加一个索引

主键索引:主键上会自动添加索引(根据主键查效率最高,因为永远扫的都是一条记录,因为主键:不为空,不能重复)

唯一索引:有unique约束的字段上会自动添加索引

7.索引失效的情况:使用模糊查询,因为第一个通配符使用的是%

select ename from emp where ename like \'%A%\';

 

以上是关于SQL索引的主要内容,如果未能解决你的问题,请参考以下文章

第11天SQL进阶-索引的创建删除(SQL 小虚竹)

SQL server初级SQL索引

oracle删除某个表的索引的sql语句

SQL语言之索引

求助,sql语句无法用到索引,执行很慢

第12天SQL进阶-索引的组合索引(SQL 小虚竹)