zoukankan      html  css  js  c++  java
  • SQL中的索引

    概述

    • 索引(index)作用:
      相当于一本字典目录,提高程序的检索/查询效率,表中每一个字段都可添加索引。
    • 主键自动添加索引:
      主键和具有unique约束的字段自动会添加索引。能够通过主键查询的尽量通过主键查询,效率较高。
    • 存储地址
      索引和表相同,都是一个对象,表是存储在硬盘文件中的,那么索引也是表的一部分,索引也存储在硬盘文件中。
    • MySQL数据库中表的检索方式有2种:
      第一种:全表扫描(效率较低)
      第二种:通过索引检索(提高查询效率)
    • 什么情况下适合给表中字段添加索引?
      1、该字段数据量庞大;
      2、该字段很少的DML操作;(由与索引也需要维护,DML操作多的话,也影响检索效率)(数据一旦修改,索引需要重新排序)
      3、该字段经常出现在where条件中。
    • 查看SQL语句的执行计划
    EXPLAIN SELECT
    	id,
    	`name` 
    FROM
    	t_user 
    WHERE
    	`name` = 'lisi';
    

    在这里插入图片描述

    索引的应用

    创建索引
    • 语法结构:
      a)create index 索引名 on 表名(列名)
      b)create unique index 索引名 on 表名(列名)
      注:添加unique表示在该表中的该列添加一个唯一性约束。
    • 示例:
    create index dept_dname_index on t_user(name);
    

    再查看解释:
    在这里插入图片描述

    查看索引
    • 语法结构:
      show index from 表名;
    • 示例:
    show index from dept;
    

    在这里插入图片描述

    删除索引
    • 语法结构:
      drop index 索引名 on 表名;
    • 示例:
    drop index dept_dname_index on t_user;
    

    索引的实现原理

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

    • 索引的实现原理?
      通过B + Tree缩小扫描范围,底层索引进行了排序、分区,索引会携带数据在表中的“物理地址",最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据。效率是最高。
    • 示例:
      select ename from emp where ename ='SMITH';
      通过索引转换为:
      select ename from emp where 物理地址 = 0x3;
    • 索引的分类
      单一索引:给单个字段添加索引
      复合索引:给多个字段联合起来添加1个索引
      主键索引:主键上会自动添加索引
      唯一索引:有unique约束的字段上会自动添加索引
    • 索引什么时候失效?
      模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。
  • 相关阅读:
    [bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马
    [bzoj4011] [洛谷P3244] [HNOI2015] 落忆枫音
    [bzoj1875] [洛谷P2151] [SDOI2009] HH去散步
    [bzoj4827] [洛谷P3723] [Hnoi2017] 礼物
    [bzoj2326] [洛谷P3216] [HNOI2011] 数学作业
    [bzoj3105] [cqoi2013] 新Nim游戏
    [YTU]_2353 ( 长方柱类【C++ 类定义】)
    [YTU]_2627 (职工工资统计)
    [YTU]_2769( 结构体--成绩统计)
    [YTU]_2577( 小数计算——结构体)
  • 原文地址:https://www.cnblogs.com/yu011/p/13356937.html
Copyright © 2011-2022 走看看