暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL索引

VFrog 2021-11-02
227
  • 索引

①单列索引-一个索引只包含单个列,一个表可以有多个单列索引,但这不是      组合索引

②组合索引-一个索引包含多个列。

  • 创建索引时,需要确保索引是应用在SQL查询语句的条件(一般作为WHERE子句的条件)

     实际上,索引也是一张表,保存了主键与索引字段,并指向实体表的记录。

     注意:过多的使用索引将会造成滥用。

     索引也会有它的缺点

    ①、虽然大大提升了查询速度,但同时也会降低更新表的速度(如对表进行INSERT、UPDATE和DELETE),因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

    ②、建立索引会占用磁盘空间的索引文件。

  • 普通索引

    -创建索引
      这是最基本的索引,它没有任何限制。它有以下几种创建方式:
      CREATE  INDEX  indexName  ON  mytable(username(length));
      如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
    -修改表结构(添加索引)
      ALTER  table  tableName  ADD  INDEX  indexName(columnName)
    -创建表的时候直接指定
      CREATE TABLE mytable(
      ID INT NOT NULL,
      username VARCHAR(16) NOT NULL,
      INDEX [indexName] (username(length))
      );  
    -删除索引的语法
      DROP  INDEX  [indexName]  ON  mytable;
  • 唯一索引

    -它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
    -创建索引
   CREATE  UNIQUE  INDEX  indexName  ON mytable(username(length));
    -修改表结构
      ALTER table mytable ADD UNIQUE [indexName] (username(length));
    -创建表的时候直接指定
      CREATE  TABLE  mytable(  
      ID  INT  NOT  NULL,
      username  VARCHAR(16)  NOT  NULL,
      UNIQUE  [indexName]  (username(length))
      );  
  • 使用ALTER 命令添加和删除索引

    有四种方式来添加数据表的索引
  1. ALTER  TABLE  tbl_name  ADD  PRIMARY  KEY  (column_list);

    该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

  2. ALTER  TABLE  tbl_name  ADD  UNIQUE  index_ name (column_list);

    这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

  3. ALTER  TABLE  tbl_name  ADD  INDEX  index_name  (column_list);

     添加普通索引,索引值可出现多次。

  4. ALTER  TABLE  tbl_name  ADD  FULLTEXT index_name (column_list);该语句指定了索引为 FULLTEXT ,用于全文索引。


    举例
        mysql> ALTER  TABLE  testalter_tbl  ADD  INDEX (c);
        还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:
        mysql> ALTER  TABLE  testalter_tbl  DROP  INDEX c;
  • 使用 ALTER 命令添加和删除主键

    主键只能作用于一个列上,添加主键索引时,需要确保该主键默认不为空(NOT NULL)。
实例如下
    mysql> ALTER  TABLE  testalter_tbl  MODIFY  i  INT  NOT  NULL;
    mysql> ALTER  TABLE  testalter_tbl  ADD  PRIMARY  KEY  (i);
    也可以使用 ALTER 命令删除主键
    mysql> ALTER  TABLE  testalter_tbl  DROP  PRIMARY  KEY;
    删除主键时只需指定PRIMARY KEY,但在删除索引时,必须知道索引名。
显示索引信息
    可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。
    尝试以下实例:
    mysql> SHOW  INDEX  FROM  table_name  \G
  • 哪些情况需要建索引

     1、主键自动建立唯一索引
     2、频繁作为查询条件的字段应该创建索引
     3、查询中与其他表关联的字段,外键关系建立索引
     4、频繁更新的字段不适合创建索引:因为每次更新不单单是更新了记录,还会更新索引
     5、where条件里用不到的字段不创建索引
     6、单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)
     7、查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
     8、查询中统计或者分组字段
  •   哪些情况不适合创建索引

      1、表记录太少
      2、经常增删改的表:why?提高了查询速度,同时会降低更新表的速度,如对表进行insert、update和delete,因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件数据重复且分布平均的表的字段,因此应该只为最经常查询和最经常排序的数据建立索引
      3、注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果


文章转载自VFrog,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论