持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
- 数据库提效,索引是物美价廉的东西,不用加内存,不用改配置
索引原理
- 为什么没有索引的话,查询数据量特别大的情况都会很慢?
- 因为每次查询都是对 表进行全表扫描
- select name from emp where id =1
- 假设emp中表里有10条数据,查询语句在执行的时候查到1之后仍然不会停止,会对全表进行扫描查询。
- 那么为什么索引快?
- 添加索引会形成一个索引的数据结构,比如二叉树(当前仅了解到二叉树
- 二叉树 等待后续补充,数据结构还未学到,当前做 二分查找来理解,二分查找会极大减少查询次数,换来性能提升。
- 添加索引会形成一个索引的数据结构,比如二叉树(当前仅了解到二叉树
- 那么代价是什么
- 前面提到索引会形成一个数据结构,而这个数据结构是占内存空间的,即,以空间换查询效率
- 索引创建过多引发磁盘占用飙升
- 对 dml(update,delete,insert 语句的执行效率造成影响
- 前面提到索引会形成一个数据结构,而这个数据结构是占内存空间的,即,以空间换查询效率
索引类型
- 主键索引 主键自增为主索引 primary key
- 唯一索引 unique
- 普通索引 index
- 全文索引 FULLTEXT 适用于 MyISAM
- 在实际开发中考虑使用 solr,和 es 做代替
查询表中是否有索引
- show index from zt_bug
- Non_unique 如果为0,则表示是唯一索引,为1 则表示非唯一索引
索引操作
- 例子 中 id_index 为索引名
添加唯一索引
- create unique index id_index on tabName(columnName)
添加普通索引
- create index id_index on tabName(columnName)
- alter table tabName add INDEX id_index (columnName)
添加主键索引
- alter table tabName add primary key (columnName)
删除索引
- drop index id_index on tabName; id_index 为索引名称
删除主键索引
- alter table tabName drop primary key 因为一张表主键只有一个,所以删除主键,不需要指定columnName
修改索引
- 先删除,后进行修改
查询索引
- 方式1
- show index from tabName
- 方式2
- show indexs from tabName
- 方式3
- show keys from tabName
- 方式4
- desc tabName
什么字段适合创建索引?
1 较频繁的作为查询条件的字段应当创建索引 2 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件 3 更新非常频繁的字段不适合创建索引 4 不会在where 子句中出现的字段不应当做索引