• 13、Mysql索引


    1、什么是索引

    索引是一种帮助mysql提高查询效率数据结构

    2、索引的优缺点

    优点:大大加快数据查询速度

    缺点:

    (1)维护索引需要消耗数据库资源

    (2)索引需要占用磁盘空间

    (3)当对标进行增删改时,需要维护索引,速度会受到影响

    3、索引的分类

    -InnoDB: 

    (1)主键索引(自动创建)--主键索引属于聚簇索引

    设定为主键后数据库会自动建立索引,逐渐索引的列值不能为空

    (2)唯一索引

    索引列的值必须唯一,但允许有空值,且只能存在一个null

    (3)单值索引(普通索引)

    一个索引只包含单个列,一个表可以有多个单列索引

    (4)复合索引

    一个索引包含多个列

    -MyISAM

    (5)Full Text 全文索引

    全文索引类型为Full Text,在定义索引的列上支持全文查找,允许这些索引列中插入重复值和空值。全文索引可以在char、varchar、text类型列上创建

    4、索引的基本操作

    (1)主键索引(在创建表时自动创建)

    1 create table user (id varchar(20) primary key, name varchar(20));
    2 show index from user;    # 查看索引

    (2)唯一索引

    1 # 创建表时添加唯一索引
    2 create table user(id varchar(20) primary key, name varchar(20),unique(name));
    3 
    4 
    5 # 创建表后添加唯一索引
    6 create table user(id varchar(20) primary key, name varchar(20));
    7 create unique index name_index on user(name);

    (3)单值索引(或普通索引)

     1 # 创建表时添加单值索引
     2 create table user(id varchar(20) primary key, name varchar(20),key(name)); 
     3 
     4 
     5 # 创建表后添加单值索引
     6 create table user(id varchar(20) primary key, name varchar(20));
     7 create index name_index on user(name);
     8 
     9 # 删除索引
    10 drop index name_index on user;

    (4)符合索引

    1 # 创建表时添加复合索引
    2 create table user(id varchar(20) primary key, name varchar(20), age int, key(name,age)); 
    3 
    4 
    5 # 创建表后添加复合索引
    6 create table user(id varchar(20) primary key, name varchar(20), age int);
    7 create index name_age_index on user(name,age);

    【经典面试题】

    复合索引:name  age birth

    判断下列组合能否利用索引

    name birth age 能

    name age birth 能

    age birth 否

    birth age name 能

    age birth 否

    【解析】

    判断能否利用索引的原则是:

    (1)最左前缀原则

    (2)mysql为了更好的利用索引,在查询过程中会动态的调整查询字段的顺序以便可以利用索引。

    5、索引底层原理解析

    (1)当我们向数据库中的插入一组数据时(主键无序插入的),Mysql数据库在为主键自动创建索引时,会基于主键对数据进行排序(这也很好的回答了乱序插入数据,但是查询的数据却是有序的);

    (2)排序后会将这些数据以链表的形式进行存储;(查询的时间复杂度为O(n))

    (3)为了提高查询效率,Mysql索引又进行了优化,采用B+树这种数据结构进行存储,即基于页的形式进行管理索引,页的默认大小为16KB;

    (4)站在整个B+树的存储结构上讲,一个3层的B+树可以存储的数据量在8~10亿左右。

    6、聚簇索引和非聚簇索引

    聚簇索引:将数据存储与索引放到一块,索引结构的叶子结点保存了行数据

    非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

  • 相关阅读:
    VS中添加搜索路径和链接库的方法
    hive多分隔符支持
    shell 遍历目录下的所有文件
    使用ansible控制Hadoop服务的启动和停止【转】
    Shell中的括号有其特殊的用法
    shell中括号[]的特殊用法 linux if多条件判断
    Linux中rz和sz命令用法详解
    vim 去掉自动注释和自动回车
    ping判断局域网ip使用情况
    shell判断有效日期
  • 原文地址:https://www.cnblogs.com/yif930916/p/15033974.html
Copyright © 2020-2023  润新知