zoukankan      html  css  js  c++  java
  • 数据库索引

    一.索引

      索引的功能就是加速查找,索引字段要尽量的小,索引的最左匹配特性.

    1.聚集索引(主键索引)

      InnoDB存储引擎表示索引组织表,即表中数据按照主键顺序存放。而聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,
    同时叶子结点存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页。聚集索引的这个特性决定了索引组织表中数据也是索引的一部分。
    同B+树数据结构一样,每个数据页都通过一个双向链表来进行链接。

    2.辅助索引(普通索引)

      辅助索引的存在并不影响数据在聚集索引中的组织,因此每张表上可以有多个辅助索引,但只能有一个聚集索引。当通过辅助索引来寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶子级别的指针获得只想主键索引的主键,然后再通过主键索引来找到一个完整的行记录,这种查找的效率也是非常高.

      回表:通过辅助索引查找其他数据,先找辅助索引,再找聚集索引

    二.常用索引

    1.普通索引:加速查询

    2.唯一索引

      主键索引:加速查询 + 约束(不能为空,不能重复)

      唯一索引:加速查询 + 约束(不能重复)

    3.联合索引

      联合主键索引: primary key(字段名1,字段名2)

      联合唯一索引: unique key(字段名1,字段名2)

      联合普通索引: index (字段名1,字段名2)

    三.创建索引

    1.创建表的时候创建索引

      create table 表名(

          字段名1 数据类型[(宽度) 约束],

          字段名2 数据类型[(宽度) 约束],

          [ primary key(字段名) /

           unique key 索引名(字段名) /

          index 索引名(字段名)] );

    2.在已经存在的表上创建索引

      create unique index 索引名 on 表名(字段名)

      create index 索引名 on 表名(字段名)

    3.在已经存在的表上添加索引

      alter table 表名  add primary key(字段名) 

               add unique key 索引名(字段名)

               add index 索引名(字段名)

    四.删除索引

      alter table 表名 drop index 索引名

       alter table 表名 drop primary key

      drop index 索引名 on 表名

    五.正确使用索引

    1.索引未命中:不会加速查询

      索引范围不明确,条件中出现: < ,>,<=,>=,!= ,between...and... ,like模糊匹配等

      索引字段参与计算

    六.联合索引

      联合索引是指对表上的多个字段合起来做一个索引,省的你查询的时候,where后面的条件字段一直变,你就想给每个字段加索引.

    1.建立联合索引的原则

      最左匹配原则,将区分度高的放最左边,依次排下来.

    七.查询优化神器

      explain 让mysql 预估执行操作

    1.语法

      explain sql语法;

  • 相关阅读:
    drf中 连表深度查询和ListSerializer类包括drf中Response二次封装
    drf中表之间断关联操作
    drf中的序列化家族
    rest_framework框架的封装特点和APIView请求生命周期
    vue项目和django项目交互补充,drf介绍,restful规范
    Vue成绩单
    面向对象编程day2
    面向对象编程day3
    面向对象编程day1
    day13
  • 原文地址:https://www.cnblogs.com/q767498226/p/10300452.html
Copyright © 2011-2022 走看看