如果我们查询的表里面有千万条数据,这时如果我们获取其中一条数据的详细信息,在没有建立索引和使用索引他们的查找时间是不相同的
举例:
如果当我们的表中有以下字段(id name age),并且id作为主键,这时如果我们查找id,会发现查询数据非常的快(已知表中有几千条数据)
select id FROM emp WHERE id=100;
但是如果我们直接查找年龄会发现,需要查找很久的时间
select age FROM emp WHERE age=20;
这个时候我们就要考虑为age建立一个索引(由于表自身就很大,所以创建索引也要花费一定的时间)
CREATE INDEX age_idx ON emp(age);
这样再次执行第二个语句就会发现执行速度变快许多,并且我们使用查看索引的语句后会发现 Index_type为BTREE类型
索引的使用方式:
创建索引:
create [UNIQUE] index 索引名称 ON 表名(字段(长度))
alter 表名 add [unque] index[索引名称] on(字段(长度))
查看索引:
show index from 表名
删除索引:
drop index[索引名称] on 表名
更改索引:
alter table tab_name add primary key(column_list) 添加一个主键,索引必须是唯一索引,不能为NULL
alter table tab_name add unque index_name(column_list) 创建的索引是唯一索引,可以为NULL
alter table tab_name add index index_name(column_list) 普通索引,索引值可出现多次
alter table tab_name add fulltext index_name(column_list) 全文索引
何时选择创建索引:
适合建立索引的情况:
1.主键自动建立唯一索引
2.频繁作为查询条件的字段应该创建索引 比如银行系统银行帐号,电信系统的手机号
3.查询中与其它表关联的字段,外键关系建立索引 比如员工,部门外键
查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度 索引能够提高检索的速度和排序的速度
查询中统计或分组的字段 分组的前提是必排序
不适合建立索引的情况:
where条件里用不到的字段不建立索引
记录比较少的表
需要经常增删改的表
索引提高了查询的速度 同时却会降低更新表的速度,如果对表的INSERT,UPDATE和DELETE
因为建立索引后, 更新表时, MYSQL不仅要保存数据,还要保存一下索引文件
数据重复的表字段
如果某个数据列包含了许多重复的内容,为它建立索引 就没有太大在的实际效果
比如表中的某一个字段为国籍,性别 数据的差异率和重复率不高,这种建立索引就没有太多意义
频繁更新的字段不适合建立索引
每次更新不单单更新数据,还要更新索引
如果你需要学习详细的mysql数据库优化,可以点击这里查看 https://ke.qq.com/webcourse/index.html#cid=401461&term_id=100478781&taid=3417419578482741&vid=z143135ztlm