mysql --索引

 帮助mysql高效获取数据的结构,本质上索引是数据结构。

目的:在于提高查询效率,可以类比字典。

举例

如果要查找“mysql”这个单词,在已经有索引的条件下,我们肯定需要定位到m字母,然后定位到y字母,再找到剩下的sql。

如果没有索引,那么你可能需要a----z,这个时间复杂度会超级高

总结

索引为排好序的快速查找数据结构。

影响:where 后面的查找和order by之后的排序

 

数据库中,除了数据本身外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据。这样就可以在这些数据结构的基础上实现高级查算法,这种数据结构就是索引。

 

索引存在哪里:文件形式存在磁盘

 

优势:

(1)类似大学图书馆建立书目索引,提高数据检索的效率,降低数据库的IO成本

(2)通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

 

劣势:

(1)实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也占空间

(2)索引可以提高查询速度,但是降低了更新表的速度,如insert,update,delete,更新表也要更新索引。

(3)索引只是提高效率的一个因素,必须是有效的索引

 

分类:单列索引,组合索引

单列索引

(1)一个索引只包含一个列

(2)可以存在多个单列索引

(3)单列索引分为:主键索引,唯一索引,普通索引

组合索引

一个组合可以包含两个或者两个以上的列

 

创建一个普通索引

方式一
create index 索引名 on 表名(字段名)
方式二
alter table 表名 add index 索引名 【using {btree|hash}】 on(字段名)
 

 例如:在学生表stu的学号列上的前5个字符建立一个索引stu_id

方式一
create index stu_id  on stu(学号(5),asc);
方式二
alter table stu add index stu_id 【using {btree|hash}】on (学号(5),asc);

  

创建唯一索引,与普通索引类似,必须唯一,可以存在空值

索引列的值必须唯一,可以为空

方式一
create unique index 索引名 on 表名(字段名)
方式二
alter table 表名 add  unique 【using {btree|hash}】on (字段名)

  

创建主键索引,必须唯一,不可以存在空值

方式一
创建表的时候添加
方式二
alter table 表名 add  primary key 【using {btree|hash}】(字段名)

 

 

组合索引

以上的语句中,字段定义多个,用,分割,只有一个索引名称

方式一
create  index 索引名 on 表名(字段名,字段名)
方式二
alter table 表名 add  index 【using {btree|hash}】(字段名,字段名)

例如

方式一
create  index fuhe_id on stu(学号,课程号)
方式二
alter table stu add  index 【using {btree|hash}】(学号,课程号)

  

查看表中索引情况

show index from 表名;

 

创建表的过程创建索引:

#正常创建表
create table 【if not exists】表名(
       列名 数据类型,
       列名  数据类型,
       列名 数据类型,
       primary key 【using{hash|btree} 】(列名,列名),
       index 【key】【using{hash|btree} 】(列名,列名),
       unique 【key】【using{hash|btree} 】(列名,列名),)      ;          

  

删除索引

方式一
drop index 索引名称 on 表名;
方式二
alter table 表名 drop primary key| drop index key 索引名 foreign key 外键名;

 

explain 命令

直接在select 语句之前加入即可

显示如何使用索引来处理select语句以及连接表

 

哪些情况适合建立索引:

(1)主键自动建立唯一索引

(2)频繁作为查询条件的字段应该创建索引

(3)查询中与其他表关联的字段,外键关系建立索引

(4)查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

(5)查询中统计或者分组字段

哪些情况不适合建立索引:

(1)频繁更新的字段不适合建立索引

(2)where条件里用不到的字段不适合建立索引

(3)单键/组合索引的选择问题,(高并发下倾向创建组合索引)

(4)表记录太少(300万)

(5)经常增删改的表

(6)数据重复且分布平均的表字段

转载于:https://www.cnblogs.com/ivyharding/p/11564769.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值