• MySQL数据库的索引


    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

    打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

    拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

    索引分为单列索引和组合索引。单列索引,一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,一个索引包含多个列。

    创建索引时,需要确保该索引是应用在SQL查询语句的条件(一般作为WHERE子句的条件)。实际上,索引也是一张表,保存了主键与索引字段,并指向实体表的记录。

    虽然索引提高了查询速度,同时却降低了更新表的速度,如对表进行insert、update、delete。因为更新表时,不仅要保存数据,还要保存索引文件。

    普通索引

    普通索引是最基本的索引,没有任何限制。
    有以下几种创建方式:

    创建索引

    CREATE INDEX index_name ON table_name (column_name)
    
    • 1

    如果是char、varchar类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定length。
    在这里插入图片描述
    在这里插入图片描述

    修改表结构(添加索引)

    ALTER table table_name ADD INDEX index_name(column_name)
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    创建表的时候直接指定

    CREATE TABLE newtable(
    	ID INT NOT NULL,
    	username VARCHAR(16) NOT NULL,
    	INDEX [index_name] (username(length))
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述

    删除索引

    DROP INDEX [index_name] ON mytable;
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    唯一索引

    唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
    有以下几种创建方式:

    创建索引

    CREATE UNIQUE INDEX index_name ON mytable (username(length))
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    修改表结构

    ALTER table mytable ADD UNIQUE [index_name] (username(length))
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    创建表的时候直接指定

    CREATE TABLE mytable(
    	ID INT NOT NULL,
    	username VARCHAR(16) NOT NULL,
    	UNIQUE [index_name] (username(length))
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述

    使用ALTER命令添加和删除索引

    有四种方式来添加数据表的索引:

    1. 添加一个主键,索引值必须唯一,且不能是NULL
    ALTER TABLE tb_name ADD PRIMARY KEY(column_list)
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    1. 创建的索引值必须是唯一的(除了NULL以外,NULL可能会出现多次)
    ALTER TABLE tb_name ADD UNIQUE index_name (column_list)
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    1. 添加普通索引,索引值可以出现多次
    ALTER TABLE tb_name ADD INDEX index_name (column_list)
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    1. 指定索引为FULLTEXT,用于全文索引
    ALTER TABLE tb_name ADD FULLTEXT index_name (column_list)
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    使用ALTER命令添加和删除主键

    主键作用于列上(可以一个列或多个列的联合主键),添加主键索引时,需要确保该主键默认不为空:

    mysql> ALTER TABLE mytable MODIFY id INT NOT NULL;
    
    • 1

    在这里插入图片描述

    mysql> ALTER TABLE mytable ADD PRIMARY KEY (id);
    
    • 1

    使用ALTER命令删除主键,删除主键时只需要指定PRIMARY KEY,但在删除索引时必须知道索引名。

    在这里插入图片描述

    显示索引信息

    使用SHOW INDEX命令列出表中相关的索引信息,通过添加\G来格式化输出信息。

    mysql> SHOW INDEX FROM mytable\G
    
    • 1

    附录

    create table if not exists `mytable`
    (
        `id`              int,
        `title`           varchar(100),
        `author`          varchar(40),
        `submission_date` date
    );
    
    show index from mytable;
    
    create index index_id on mytable (id);
    
    alter table mytable
        add index index_title (title);
    
    create table if not exists `newtable`
    (
        `id`              int,
        `title`           varchar(100),
        `author`          varchar(40),
        `submission_date` date,
        index index_title (title(100))
    );
    
    show index from newtable;
    
    drop index index_title on mytable;
    
    create unique index index_author on mytable (author(40));
    
    alter table mytable
        add unique index_title (title(100));
    
    create table if not exists `newtable2`
    (
        `id`              int,
        `title`           varchar(100),
        `author`          varchar(40),
        `submission_date` date,
        unique index_title (title(100))
    );
    
    show index from newtable2;
    
    alter table newtable2
        add primary key (id);
    
    alter table newtable2
        add unique index_author (author);
    
    alter table newtable2
        add index index_submission_date (submission_date);
    
    create table if not exists `newtable3`
    (
        `id`              int,
        `title`           varchar(100),
        `author`          varchar(40),
        `submission_date` date,
        `content`         text
    );
    
    show index from newtable3;
    
    alter table newtable3
        add fulltext index_content (content);
    
    alter table newtable3
        modify id int not null;
    
    alter table newtable3
        add primary key (id);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
  • 相关阅读:
    MyBatis之xml配置的解析
    【数据结构】二叉树 (Binary Tree)
    分布式数据库Mongodb——实验一
    安卓系列全机型刷写原生 去除wifi打叉 去除感叹号方法解析
    数据结构--平衡二叉树
    FreeSWITCH的originate命令解析及示例
    vue2 quill 视频上传 ,基于ruoyi vue,oss
    企业软文怎么写?教你搞定各种类型软文
    集成一个以官网(微信,QQ,微博)为标准的登录分享功能
    【Python 3】函数
  • 原文地址:https://blog.csdn.net/qq_40507857/article/details/125999691