Mysql 温故知新系列 【索引详解】

933 阅读2分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

为什么需要索引

以我们最熟悉的字典为例,我们需要查询一个陌生字时,需要根据笔画、偏旁部首、或大概拼音的条件,先在目录页查找到这个字,然后就知道这个字位于字典中具体的哪一页。

考虑另一个情况,我们直接从头到尾翻阅整本字典,直到找到我们需要的那个字🤔这个操作的耗时,和上一个方案比起来,简直天差地别!

在这个案例当中,字典的目录,就担任了【索引】的角色,他的好处就是,帮助我们极大的提升查询的速度

注意:在 mysql 中,由于数据的特殊性: ① 如随着时间推移不断增多; ② 数据会不断的变更【修改/删除】;

我们在使用索引时需要额外小心!!数据变化意味着索引需要同步维护!! 此外,索引时需要额外的存储空间进行维护的!!使用时需要慎重!!

普通索引

create index index_name on table_name (column_name)

唯一索引

相比于普通索引,唯一索引添加了唯一约束 unique

create unique index index_name on table_name (column_name)

建表时创建

create table test (
  id int not null,
  uname varchar(20),
  phone varchar(20),
  index ind_uname (uname(20)),  -- ind_uname 是我们自定义的索引名,可以省略使用默认
  unique ind_u_phone (phone(20))   -- 创建一个唯一索引
);

修改

-- 追加普通索引
alter table table_name add index [index_name] (column_name)
-- 追加唯一索引
alter table table_name add unique [index_name] (column_name(length))

image.png

如图所示,如果不指定索引名,mysql 会使用 字段名+'_'+n 的模式来自动创建

删除

drop index [index_name] on table_name;

显示当前表索引

show index from test

image.png