索引

  1. 索引可以提高数据库性能,提高查询速度;
  2. 索引本身也会占用空间
  3. 创建索引后,只对创建了索引的列有效

索引的原理

  1. 没有索引时 (select * from emp where id = 1)会进行全表扫描,速度慢
  2. 在id创建索引时,会建立索引的数据结构(比如二叉树)来帮助搜索

索引的代价

  1. 磁盘占用
  2. 对dml(updata delete insert)语句有一定效率上的影响,但是项目中,select的频率远多于其他,所以索引很有意义

索引的类型

  1. 主键索引,主键自动的为主索引(类型Primary Key)
  2. 唯一索引(UNIQUE)
  3. 普通索引(INDEX)
  4. 全文索引(FULLTEXT)[适用于MylSAM]
    一般开发,不使用mysql自带的全文索引,而是使用:全文搜索Solr和ElasticSearch(ES)

如何选择

如果某列的值不会重复,优先使用unique索引,否则普通

索引的使用

  1. 添加索引
create [UNIQUE] index 索引名 on 表名(列名[length][ASC|DESC],...);

alter table 表名 ADD INDEX [索引名](列名,...);
  1. 添加主键(索引)
alter table 表名 add primary key(列名);
  1. 删除索引
drop index 索引名 on 表名;

alter table 表名 drop index 索引名;
  1. 删除主键索引(比较特别)
alter table 表名 drop primary key;
  1. 查询索引(三种方式):
show index或indexes from 表名
show keys from 表名
desc 表名;
  1. 修改索引就是先删除再添新的索引

哪些列上适合使用索引

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

本文章使用limfx的vscode插件快速发布