mysql引索某一行_mysql 几种索引的复习(温故而知新)

explain执行计划包含的信息

7ff11d86e5779ce030272d952aed0332.png

c9396fed1385ce2ed7e8a09dfcd906d9.png

type 访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,好的sql查询至少达到range级别,最好能达到ref

-- eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键 或 唯一索引扫描

664ebb9b10ed088b6694f739983b5511.png

和 左连接 右连接一样

97c447c22434301426da145bafe50b3e.png

-- ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质是也是一种索引访问,它返回所有匹配某个单独值的行,然而他可能会找到多个符合条件的行,所以它应该属于查找和扫描的混合体

io表共三个索引

9ebda8c498e96190c68dbd5677330b12.png

走的是索引查找

176cc392719738bdd3f604d29375bdc4.png

一个device_id有很多条记录

be330709c55154f0b4805772d926328e.png

--  ALL:Full Table Scan,遍历全表以找到匹配的行

5b8ee15973cc1cbce94a51c24ad5472c.png

一个最简单的查询 花费了3秒多 随着数据量的增加 ALL花费的时间越来越大

d148f8b86af36ab5044a4bd9e0144c97.png

-- range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了那个索引。一般就是在where语句中出现了bettween、、in等的查询。这种索引列上的范围扫描比全索引扫描要好。只需要开始于某个点,结束于另一个点,不用扫描全部索引

未给signal_strength字段加索引前 如下

b4af6f527d7de779280b99ed13d67fa6.png

102a46eba46e5f74abeda4a6a0041bcd.png

给signal_strength字段加索引后 如下

8793b967be06c15bac9442b4687e8fab.png

dd84bb3d7a3ac0288d3bfa3792275a69.png

存在一种情况 实际使用的索引,如果为NULL,则没有使用索引 如下

-73 -74 -75 都有值 不存在null 走索引

510a5f761fb4a47b0a6ee334147a3b94.png

-73 到 80 之间 存在null 此时不走索引 走全表扫描

ce570a6601c63ed9717039ba4f54955c.png

--index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。(Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取)

io表共三个索引 测试一个查索引列 一个不查索引列

94ba4799c32a10097ba400d225b82700.png

查询索引列

1d606202d8efa2d4fe10a6c549af2bd2.png

不查索引列

e957c308d8f47d80f904011c396ef697.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值