mysql - 索引

1. 什么是索引?使用索引的优劣?

索引是帮助mysql高效获取数据的数据结构。所以说索引是数据结构。

索引的优势: 索引大大减少了服务器需要扫描的数据量    索引可以帮助服务器避免排序和临时表   索引可以将随机I/O变为顺序I/O


索引的劣势:实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间的。同时在更新表时也要更新索引,有时间成本。

2.索引的分类

按索引是否包含记录数据:聚簇索引(包含数据)    非聚簇索引(也叫二级索引,不包含数据)

按索引是否建立在主键上:主键索引    辅助索引

按索引底层的数据结构:HASH索引   B+Tree索引 (mysql大部分存储引擎支持的都是BTREE)

按索引的常规功能:    

单值索引:一个索引只包含单个列,一个表可以有多个单列索引,建议不超过5个

复合索引:一个索引包含多个字段,如账号+密码构成一个复合索引

主键索引(PRIMARY): 表中主键创建的索引,只能有一个,不允许为NULL

唯一索引(UNIQUE):索引值的列必须唯一,可以有多个,允许为NULL

全文索引(FULLTEXT): 全文索引查找文本中的关键词,而不是比较索引中的值,可以有多个

3.什么情况建立索引

1》主键自动建立唯一索引

2》频繁作为查询条件的字段

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

4》查询中排序,统计和分组的字段

4.索引的sql语法

创建索引:

1.建表的时候就创建索引

create table t_dept(
    id int not null primary key,
    name varchar(20) null,
    sex varchar(2) null,
    info varchar(20) null,
    index index_id(id)
)

2.在已建表中添加索引

create index 索引名称 on 表名(字段名)

eg:create index index_name on t_dept(name)

3.以修改表的方式添加索引

alter  table  表名 add index   索引名(字段名)

eg:alter table t_dept add index index_name(name);

查看索引
show index from 表名

删除索引
drop index 索引名 on 表名

5.索引失效的场景

1.模糊查询:like '%';like '%%'通配符放在开头会导致索引失效。会进行全表扫描

2.WHERE 子句中使用OR连接:当or前后都是索引列的时候不会导致索引失效,但当or前后有一个不是索引列的时候索引就会失效

3.索引列使用运算符,!=或者not:类似使用函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值