Mysql索引


MySql 索引

什么是索引 index

官方定义:一种能帮mysql提高查询效率的数据结构



- 索引的优点

  1. 大大提升数据查询效率

- 索引缺点

  1. 维护索引需要耗费数据资源

  2. 索引需要占用电脑空间

  3. 当对表进行增删改时,因为要维护索引,速度会受到影响

索引分类(面试必问)

InnoDB

- a. 主键索引
    设定为主键后数据库会自动创立索引,innodb为聚簇索引  主键索引的索引列的值不能为空
- b. 单值索引(单列索引、普通索引)
    即一个索引只包含一个列,一个表可以有多个单列索引
- c. 唯一索引
    索引的值必须唯一,但允许有空值  唯一索引列值可以存null 但是只能存在一个null
- d. 复合索引
    即一个索引包含多个列


- e. Full Text 全文索引(MYSQL5.7之前 只能用于MYISAM引擎)

索引的基本操作

1. 主键索引 自动创建

- 主键索引是在建表时自动创建的
CREATE TABLE t_user(
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(20)
)

- 查看表的索引
SHOW INDEX FROM t_user
image-20210304105253785
2. 单列索引(普通索引 单值索引)
- 普通索引的创建:
    - 建表时创建 
    CREATE TABLE t_user1(
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20),
    KEY(name)
    )
    show index from t_user1
    - 建表之后创建
    CREATE INDEX name_index on t_user(name)

效果图,第一张是建表时创建,第二张是建表之后创建

image-20210304110357367 image-20210304110431593

3. 唯一索引
- 唯一索引的创建
    - 建表时创建
    CREATE TABLE t_user2(
    id VARCHAR(20) PRIMARY KEY,
    name VARCHAR(20),
    UNIQUE(name)
    )
    show index from t_user2;
    
    - 建表后创建
    create index unique name_index on t_user2(name)
image-20210304133328268
4. 复合索引
- 复合索引的创建
    - 建表时创建
    create table t_user3(
    id varchar(20) primary key,
    name varchar(20),
    age int,
    key(name,age)
    )
    show index from t_user3
    - 建表后创建
    create index on t_user3(name,age)
    
    根据索引查找:
    name age bir #1.左前缀原则 2.mysql引擎在查询时为了更好的利用索引,在查询过程中会动态的调整查询字段的顺序
image-20210304133757586

索引的底层原理

- 我们执行以下语句    
    create table t_emp(id int primary key,name varchar(20),age int);

    insert into t_emp values(5,'d',22);
    insert into t_emp values(6,'d',29);
    insert into t_emp values(7,'e',28);
    insert into t_emp values(1,'a',27);
    insert into t_emp values(2,'b',26);
    insert into t_emp values(3,'c',25);
    insert into t_emp values(4,'a',24);
    insert into t_emp values(8,'f',22);
    insert into t_emp values(9,'v',21);

    show index from t_emp

    select * from t_emp
- 我们在插入时是无序的,但是查询结果却是有序的
- 为什么要进行排序
    为了方便快捷查询

文章作者: 夏梦
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 夏梦 !
 上一篇
liunx虚拟机安装 liunx虚拟机安装
Linux1.Linux的引言Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持
2021-04-09 夏梦
下一篇 
RibbitMQ 实战教程 RibbitMQ 实战教程
RabbitMQ 实战教程1.MQ引言1.1 什么是MQMQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的
2021-04-09 夏梦
  目录