美文网首页转载部分
MySQL中的索引用法总结

MySQL中的索引用法总结

作者: FoxLayla | 来源:发表于2019-03-28 10:32 被阅读34次

MySQL中的索引用法总结

索引作为一种数据结构,其用途是用于提升检索数据的效率。

索引的分类

MySQL中的索引共分为:

  • 普通索引(INDEX):索引列值可重复
  • 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL
  • 主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引
  • 全文索引(FULL TEXT):给每个字段创建索引

不同类型索引用途的区别

  • 普通索引常用于过滤数据。例如,以商品种类作为索引,检索种类为“手机”的商品。
  • 唯一索引主要用于标识一列数据不允许重复的特性,相比主键索引不常用于检索的场景。
  • 主键索引是行的唯一标识,因而其主要用途是检索特定数据。
  • 全文索引效率低,常用于文本中内容的检索。

使用索引

创建索引

  • 普通索引(INDEX):

    -- 在创建表时指定
    CREATE TABLE student (
      id INT NOT NULL,
        name VARCHAR(100) NOT NULL,
        birthday DATE,
        sex CHAR(1) NOT NULL,
        INDEX nameIndex (name(50))
    );
    
    -- 基于表结构创建
    CREATE INDEX nameIndex ON student(name(50));
    
    -- 修改表结构创建
    ALTER TABLE student ADD INDEX nameIndex(name(50));
    
  • 唯一索引(UNIQUE):

    -- 在创建表时指定
    CREATE TABLE student (
      id INT NOT NULL,
        name VARCHAR(100) NOT NULL,
        birthday DATE,
        sex CHAR(1) NOT NULL,
        UNIQUE idIndex (id)
    );
    
    -- 基于表结构创建
    CREATE UNIQUE INDEX idIndex ON student(id);
    
    -- 修改表结构创建
    ALTER TABLE student ADD UNIQUE INDEX idIndex(id);
    
  • 主键索引(PRIMARY KEY):

    -- 创建表时时指定
    CREATE TABLE student (
      id INT,
        name VARCHAR(100) NOT NULL,
        birthday DATE,
        sex CHAR(1) NOT NULL,
        PRIMARY KEY (id)
    );
    
    -- 修改表结构创建
    ALTER TABLE student ADD PRIMARY KEY (id);
    

    主键索引不能使用基于表结构创建的方式创建。

删除索引

  • 普通索引(INDEX):

    -- 直接删除
    DROP INDEX nameIndex ON student;
    
    -- 修改表结构删除
    ALTER TABLE student DROP INDEX nameIndex;
    
  • 唯一索引(UNIQUE):

    -- 直接删除
    DROP INDEX idIndex ON student;
    
    -- 修改表结构删除
    ALTER TABLE student DROP INDEX idIndex;
    
  • 主键索引(PRIMARY KEY):

    ALTER TABLE student DROP PRIMARY KEY;
    

    主键不能采用直接删除的方式删除。

查看索引

SHOW INDEX FROM student;

选择索引的原则

  • 常用于查询条件的字段较适合作为索引,例如WHERE语句和JOIN语句中出现的列
  • 唯一性太差的字段不适合作为索引,例如性别
  • 更新过于频繁(更新频率远高于检索频率)的字段不适合作为索引

使用索引的利弊

  • 使用索引的好处是索引通过一定的算法建立了索引值于列值直接的联系,可以通过索引直接获取对应的行数据,而无需进行全表搜索,因而加快了检索速度
  • 但由于索引也是一种数据结构,它需要占据额外的内存空间,并且读取索引也加会大IO资源的消耗,因而索引并非越多越好,且对过小的表也没有添加索引的必要

相关文章

  • MySQL中的索引用法总结

    MySQL中的索引用法总结 索引作为一种数据结构,其用途是用于提升检索数据的效率。 索引的分类 MySQL中的索引...

  • MySQL索引知多少

    mysql索引 总结关于mysql的索引,查询优化,SQL技巧等 1 索引类型 B-Tree索引 Hash索引 ...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • Mysql 索引 & 锁

    Mysql索引在开发工作中经常用到,在此总结一些关于mysql索引的一些学习笔记 1mysql索引的本质是什么? ...

  • sql语法 _ 索引

    索引 1,索引相关 2,MySQL创建,删除索引 3,索引测试 4,索引总结 (表格接上) 1,如果范围大...

  • MySQL索引背后的数据结构及算法原理

    参考来源 mysql索引分析 MySQL索引背后的数据结构及算法原理 MySQL中EXPLAIN命令详解 索引连接...

  • 20、MySQL 索引类型有哪些?

    MySQL 索引类型有哪些? 主键索引 索引列中的值必须是唯一的,不允许有空值。 普通索引 MySQL中基本索引类...

  • Mysql之索引的基本概念语法

    1.Mysql中索引的概念 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检...

  • 索引

    mysql中的索引 MySQL中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引...

  • 索引

    MYSQL索引 MYSQL中索引文件以B树结构存储,索引可分为单列索引和多列索引。 对于多列索引中,当一个SQL语...

网友评论

    本文标题:MySQL中的索引用法总结

    本文链接:https://www.haomeiwen.com/subject/ipwfbqtx.html