- 索引可以提高数据库性能,提高查询速度;
- 索引本身也会占用空间
- 创建索引后,只对创建了索引的列有效
索引的原理
- 没有索引时 (select * from emp where id = 1)会进行全表扫描,速度慢
- 在id创建索引时,会建立索引的数据结构(比如二叉树)来帮助搜索
索引的代价
- 磁盘占用
- 对dml(updata delete insert)语句有一定效率上的影响,但是项目中,select的频率远多于其他,所以索引很有意义
索引的类型
- 主键索引,主键自动的为主索引(类型Primary Key)
- 唯一索引(UNIQUE)
- 普通索引(INDEX)
- 全文索引(FULLTEXT)[适用于MylSAM]
一般开发,不使用mysql自带的全文索引,而是使用:全文搜索Solr和ElasticSearch(ES)
如何选择
如果某列的值不会重复,优先使用unique索引,否则普通
索引的使用
- 添加索引
create [UNIQUE] index 索引名 on 表名(列名[length][ASC|DESC],...);
alter table 表名 ADD INDEX [索引名](列名,...);
- 添加主键(索引)
alter table 表名 add primary key(列名);
- 删除索引
drop index 索引名 on 表名;
alter table 表名 drop index 索引名;
- 删除主键索引(比较特别)
alter table 表名 drop primary key;
- 查询索引(三种方式):
show index或indexes from 表名
show keys from 表名
desc 表名;
- 修改索引就是先删除再添新的索引
哪些列上适合使用索引
- 较频繁的作为查询条件字段的应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合创建索引
- 不会出现在where字句中的字段不该创建索引
本文章使用limfx的vscode插件快速发布