zoukankan      html  css  js  c++  java
  • 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%';

  • 相关阅读:
    数组常用操作实现
    链表简单实现栈与队列
    亿万级别的表数据处理方式
    ubuntu安装与卸载.dep软件
    pg数据库表接口和数据导出
    深入分析理解Tomcat体系结构
    Servlet源码级别进行详解
    Maven命令行创建java或javaWeb项目
    解释语言与编译语言
    C++中Reference与Pointer的不同
  • 原文地址:https://www.cnblogs.com/xing-29391/p/12234222.html
Copyright © 2011-2022 走看看