学习MYSQL索引后的一些思考

2 篇文章 0 订阅

1.创建索引

CREATE INDEX方式,用于创建表的时候

普通的索引的创建:

CREATE INDEX (自定义)索引名 ON 数据表(字段);

复合索引的创建:

CREATE INDEX (自定义)索引名 ON 数据表(字段,字段....);

ALTER TABLE方式,用于建表完成后添加索引

//普通索引
alter table (表名) add index index_name (字段,字段....) ;
//唯一索引
alter table (表名) add unique (字段,字段....) ;
//主键索引
alter table (表名) add primary key (字段,字段....) ;
//全文索引
ALTER TABLE (表名) ADD FULLTEXT (字段,字段....) ;
//主键索引
ALTER TABLE (表名) ADD INDEX index_name (字段,字段....) ;

2查看是否有索引

在查询条件前使用EXPLAIN命令可以查看SQL的执行计划,如果是NULL,说明无索引。

3.一条SQL语句执行得很慢的原因有哪些?

①大多数情况下很正常,偶尔很慢

​ (1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。

​ (2)、执行的时候,遇到锁,如表锁、行锁。

②这条 SQL 语句一直执行的很慢(索引失效,或者没有索引,数据库选择不走索引)

​ 1、like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。

​ 2、or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效

​ 3、组合索引,不是使用第一列索引,索引失效。

​ 4、数据类型出现隐式转化(手动也会导致索引失效)。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。

​ 5,在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
6 ,查询条件(=左边出现运算或者函数),这时候索引会失效。
7 ,联合索引会在遇到范围查询(>、<、between、like)就停止匹配。

也就是说,我们如果走 非主键索引这个字段的索引的话,最后会查询到对应主键的值,然后,再根据主键的值走主键索引,查询到整行数据返回。所以说走全表查询要查询n行,那索引就是2n,如果n很大,这个时候2n >>n,数据库就会放弃索引走全表查询)

4.聚集索引

所谓聚集索引,就是data域存放着数据,主键索引就属于聚集索引。

5.非聚集索引

非聚集索引是data存放着主键或数据的指针,二级索引就属于非聚集索引。

6.索引覆盖

如果我们要查询的字段恰好建立了索引,那就不用“回表”再根据主键查一遍,直接返回值

例如:select name from table_a where name=‘zrx’;;这时候我们恰好有为name字段建立索引,我们就能得到name的值(因为索引的key本身就是name啊),系统难道还会去根据主键回表再查一遍吗?答案是肯定不会的。

同样地,

例如:select id from table_a where id=‘10086’;这查询也会出现索引覆盖,因为主键索引的key同样是id,数据库就不会再去回表查询一遍了。

这个覆盖索引有点奇奇怪怪啊,根据一个已经知道的值再查一遍。不过我猜想还是有作用的,应该在像右模糊查询这种情况下。

7.哪些字段适合作为索引

1.查询频繁,修改不频繁

2.经常作为条件查询的

8.B+树

如果不想了解的太透彻,但是又想快速理解。我们不妨这样想,从名字我们就可以知道这个结构就是树,树的话,我们学后端的就知道保存在树的数据都是排序的,所以,我们不难的出结论。树的key是有序的而已有一个区间,越往下区间越小,最终定位到需要的数据。

引用:https://www.cnblogs.com/wdss/p/11186411.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值