小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
为什么需要索引
以我们最熟悉的字典为例,我们需要查询一个陌生字时,需要根据笔画、偏旁部首、或大概拼音的条件,先在目录页查找到这个字,然后就知道这个字位于字典中具体的哪一页。
考虑另一个情况,我们直接从头到尾翻阅整本字典,直到找到我们需要的那个字🤔这个操作的耗时,和上一个方案比起来,简直天差地别!
在这个案例当中,字典的目录,就担任了【索引】的角色,他的好处就是,帮助我们极大的提升查询的速度
注意:在 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))
如图所示,如果不指定索引名,mysql 会使用 字段名+'_'+n 的模式来自动创建
删除
drop index [index_name] on table_name;
显示当前表索引
show index from test