5. 索引

索引的作用?
索引用于快速查找具有特定列值的行。如果没有索引,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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参考:MySQL索引背后的数据结构及算法原理://www.greatytc.com/p/fae74b6a...
    莫小归阅读 557评论 0 0
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,476评论 1 8
  • 1.InnoDB存储引擎索引概述 InnoDB支持以下几种常见的索引: B+树索引:传统意义上的索引,目前关系型数...
    加夕阅读 560评论 0 2
  • http://www.runoob.com/mysql/mysql-index.htmlhttp://blog.c...
    24_yu阅读 268评论 0 0
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,025评论 0 8