MySQL索引必知必会
  ZI8auM7AuOiW 2023年11月01日 89 0

索引必知必会

索引原理

没有索引的时候,搜索是全表进行扫描,速度很慢;

当我们建立了一个索引后,会生成一个索引的数据结构(例如索引二叉树)

代价

  • 索引会占用磁盘空间
  • 对增删改语句的效率有影响 -> 结合实际场景是查询业务多还是增删改业务多来判断

所以不能盲目添加

规则

  1. 频繁作为查询条件的字段可以创建索引
  2. 唯一性太差的字段不适合单独创建索引,即使频繁查询
  3. 频繁更新的字段不适合创建索引
  4. 不会出现在where子句中的字段不要创建索引

索引类型

  1. 主键索引(primary key)
  2. 唯一索引(unique key)
    因为要判断是否唯一,也是需要查询全表的
  3. 普通索引(index)
    一个索引只包含单个列
  4. 联合索引
    一个索引包含多个列
  5. 全文索引(fulltext)适用于MyISAM
    实际开发中很少用这个索引,一般用Solr或者ElasticSearch

索引的使用

查询索引

show indexes from 表名;
show keys from 表名;

添加索引

建表时添加

create table 表名(id bigint(20) primary key, name varchar(20), key(name), 字段1 类型, unique(字段1), 字段2 类型, 字段3 类型, key(字段2, 字段3), ...);

建表后添加

create [unique] index 索引名 on 表名 (列名);
alter table 表名 add [unique] index 索引名 (列名);

添加主键索引

alter table 表名 add primary key (列名);

注:在某表某列创建的这个索引,只对该列有效,即查询时使用该列作为条件才有效果
如果某列的值不会重复,则优先考虑unique索引,否则使用普通索引

删除索引

drop index 索引名 on 表名;

删除主键索引

alter table 表名 drop primary key;

后续再更新索引调优的内容

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  yThMa20bw7iV   2024年05月20日   61   0   0 MySQL
  pwciJmn0pWhj   2024年05月18日   57   0   0 MySQL
  WOljo6A3TCPl   2024年05月20日   52   0   0 MySQL
  8MfSLxyzjZA4   2024年05月20日   53   0   0 MySQL
  pwciJmn0pWhj   2024年05月17日   54   0   0 MySQL
  U6xQfOH75OE1   2024年05月17日   44   0   0 MySQL
  ijEHlwWobBkw   2024年05月17日   48   0   0 MySQL
  ijEHlwWobBkw   2024年05月17日   51   0   0 MySQL
  IS5q6TY5yQNJ   2024年05月17日   51   0   0 MySQL
ZI8auM7AuOiW