• 【MySQL】索引的创建、查看和删除


    一、创建索引

    1、在创建表的同时创建索引

    使用create table创建表时,除了可以定义列的数据类型外,还可以定义主键约束 外键约束 或者唯一性约束,而不论创建那种约束,在定义约束的同时相当于在指定列上创建了一个索引。

    ① 创建普通索引

    CREATE TABLE book(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR,
    #声明索引
    INDEX idx_bname(book_name)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ② 创建唯一性索引

    声明有唯一索引的字段,在添加数据时,要保证唯一性,但是可以添加null
    唯一性索引的关键字:unique

    CREATE TABLE book1(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR,
    #声明索引
    UNIQUE INDEX uk_idx_cmt(COMMENT)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ③ 创建主键索引

    设定为主键后数据库会自动建立索引,innodb为聚簇索引,语法:
    关键字:PRIMARY KEY

    #通过定义主键约束的方式定义主键索引
    CREATE TABLE book2(
    book_id INT PRIMARY KEY ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:删除主键索引:通过删除主键约束的方式来删除主键索引

    ALTER TABLE book2
    DROP PRIMARY KEY;
    
    • 1
    • 2

    修改主键索引:必须先删除掉(drop)原索引,再新建(add)索引

    ④创建单列索引

    CREATE TABLE book3(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR,
    #声明索引
    UNIQUE INDEX idx_bname(book_name)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ⑤ 创建联合索引

    CREATE TABLE book4(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR,
    #声明索引
    INDEX mul_bid_bname_info(book_id,book_name,info)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ⑥ 创建全文索引

    fulltext全文索引可以用于全文搜素,并且只为char varchar 和text列创建索引。
    索引总是对整个列进行,不支持局部(前缀)索引。

    CREATE TABLE test4(
    id INT NOT NULL,
    NAME CHAR(30) NOT NULL,
    age INT NOT NULL,
    info VARCHAR(255),
    FULLTEXT INDEX futxt_idx_info(info(50))
    # info(50)属于局部(前缀)索引,当前不支持,只会对当前列进行全部搜索
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    全文索引可以创建多列

    CREATE TABLE articles (
      id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
      title VARCHAR (200),
      body TEXT, 
      FULLTEXT index (title, body) 
    ) ENGINE = INNODB ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    tips:用于模糊查询

    like方式的查询:

    SELECT * FROM papers WHERE content LIKE%查询字符串%;
    
    • 1

    全文索引用match+against方式查询:

    SELECT * FROM papers WHERE MATCH(title,content) AGAINST (‘查询字符串’);
    
    • 1

    注意点
    1. 使用全文索引前,搞清楚版本支持情况;
    2. 全文索引比 like + % 快 N 倍,但是可能存在精度问题;
    3. 如果需要全文索引的是大量数据,建议先添加数据,再创建索引。

    ⑦ 创建空间索引

    空间索引创建中,要求空间类型的字段必须为 非空 。
    举例:创建表test5,在空间类型为GEOMETRY的字段上创建空间索引,SQL语句如下:

    CREATE TABLE test5( 
      geo GEOMETRY NOT NULL, 
      SPATIAL INDEX spa_idx_geo(geo) 
    ) ENGINE=MyISAM;
    
    • 1
    • 2
    • 3
    • 4

    2、在已经创建好的表上创建索引

    在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。

    ① 使用alter table语句创建索引

    基本语法:alter table …add…

    #创建数据表
    CREATE TABLE book5(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR
    );
    
    # 创建索引 alter table ...add...
    # 普通索引
    ALTER TABLE book5 ADD INDEX idx_cmt(COMMENT);
    # 唯一性索引
    ALTER TABLE book5 ADD UNIQUE uk_idx_bname(book_name);
    # 联合索引
    ALTER TABLE book5 ADD INDEX mul_bid_bname_info(book_id,book_name,info);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ② 使用create index创建索引

    基本语法:create index…on…

    CREATE INDEX语句可以在已经存在的表上添加索引,在MySQL中, CREATE INDEX被映射到一个ALTER TABLE语句上,基本语法结构为:

    # 创建数据表
    CREATE TABLE book6(
    book_id INT ,
    book_name VARCHAR(100),
    AUTHORS VARCHAR(100),
    info VARCHAR(100) ,
    COMMENT VARCHAR(100),
    year_publication YEAR
    );
    
    # 创建索引 create index...on....
    # 普通索引
    CREATE INDEX idx_cmt ON book6(COMMENT);
    # 唯一性索引
    CREATE UNIQUE INDEX  uk_idx_bname ON book6(book_name);
    # 联合索引
    CREATE INDEX mul_bid_bname_info ON book6(book_id,book_name,info);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    二、查看索引

    通过命令查看索引
    方式一:

    SHOW CREATE TABLE book;
    
    • 1

    方式二:

    SHOW INDEX FROM book;
    
    • 1

    三、删除索引

    1、使用ALTER TABLE删除索引

    ALTER TABLE删除索引的基本语法格式如下: ALTER TABLE … DROP INDEX …

    ALTER TABLE book5 
    DROP INDEX idx_cmt;
    
    • 1
    • 2

    提示:添加Auto_increment(自增长)约束字段的唯一索引不能被删除

    2、使用DROP INDEX语句删除索引

    DROP INDEX删除索引的基本语法格式如下: DROP INDEX … ON …

    DROP INDEX uk_idx_bname ON book5;
    
    • 1

    tips:删除联合索引中的相关字段(删除表中字段)

    删除联合索引中的相关字段

    ALTER TABLE book5
    DROP COLUMN book_name;
    
    • 1
    • 2

    提示:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。

  • 相关阅读:
    [解方程]Map 2022杭电多校第6场 1009
    MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
    Mac本安装objection
    HTML 对象
    Java开发手册提炼
    SQL 运算符
    C#界面实时显示当前时间 定时器
    计算机网络常见面试题
    Compose和AndroidView的交互
    OpenText™ Exceed™ TurboX (ETX) 助力医疗保健信息系统开发商将远程访问的稳定性提高了 95%
  • 原文地址:https://blog.csdn.net/Laura__zhang/article/details/125533000