索引的作用?
索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。表越大,成本越高。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间寻找的位置,而无需查看所有数据。这比按顺序读取每一行要快得多。
类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。
普通索引
创建普通索引
create index 索引名 on 表名(列名);
删除普通索引
drop index 索引名 on 表名;
查看索引
show index from 表名称;
建表同时创建普通索引
create table t1(
id int not null auto_increment primary key,
name varchar(32),
email varchar(64),
extra text,
index ix_name(name)
/*添加索引到列名 name, 索引名为 ix_name*/
)
唯一索引
某一列属性值唯一时可创建唯一索引,查找更加快速。
/*创建表和唯一索引*/
create table t2(
id int not null auto_increment primary key,
name varchar(32),
email varchar(64),
unique index ix_name (name)
);
/*创建唯一索引*/
create unique index 索引名 on 表名(列名);
/*删除唯一索引*/
ALTER TABLE 表名 DROP INDEX 索引名;
主键索引
主键有两个功能:加速查询 和 唯一约束(不可含null)
当一个列被创建为主键时,它就会被赋予主机索引的属性。
联合索引
联合索引是将n个列联合成一个索引
其应用场景为:频繁的同时使用 n 个列来进行查询,如:where name = 'shark' and age = 18。
MySQL [teacher]> create index _name_email_email on t10(id,name,email);
drop 删除一个联合索引的时候,索引记录里面三个都删除掉了
SQl 执行计划
并不是真的执行,只是分析SQL语句.....
explain select name from t1 where name='shark'\G