MySQL索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSbOiPCO-1646924316182)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310092710350.png)]

空间换时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rAQKEYFj-1646924316183)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310093200630.png)]

MySQL每次读取都是16KB的数据

若加了索引

若主键是int(4个字节)(指针占6个字节)

第一层 16KB/(4+6)==1638

第二层 1638*1638=2683044

第三次 2683044*16=42928704

这里的16 是假设每一条数据占1KB

索引只是一种数据结构

全表扫描 :从叶子节点从左往右一直扫描

走索引: 从B+树从上往下一直扫描

InnoDB 里面 的回表:

建立联合索引时,查到最后末子节点,是主键,然后回表在主键索引里面查

范围查找导致索引失效原理分析

走索引 与 全表扫描 做比较 看谁更快

在这里插入图片描述

所以,我们在写查找条件时尽量精确

覆盖索引的原理

例如 select b from t where b>1

就会走索引 ,因为b在联合索引(b,c,d)里面

查到了不需要回表就可以直接返回

sql 里你查询的这个字段就在你sql所利用的索引里面

select a,b,c,d from t where b>1

也会走索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JuYmAQpi-1646924316184)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310103919121.png)]

索引扫描的底层原理

select b from t 也会走索引 一种 主键方式遍历,一种联合索引遍历

如果时全表扫描的话,把每条字段b取出来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GEQIuHsM-1646924316185)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310104548539.png)]

bcd 索引结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NeMhOuZD-1646924316185)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310104647245.png)]

区别主键索引树下末子节点存的是 所有数据,而联合索引下末子节点存的是主键值,而每次最多读16KB,所以联合索引树末子节点存的数据更多

所以联合索引只需要 遍历三页,比全表扫描快

select c from t 也会走索引 原理同上 ,不会从上往下走索引,比全表扫描快

order By 为什么会破环索引

select * from t order by b,c,d; 不会走索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZnR2Tgm-1646924316185)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310105845504.png)]

MySQL的数据类型转换

字符转换为数字 转换为0

特例:如果字符是数字 就 直接转换为数字

对字段进行操作导致索引失效原理

  • 类型转换
  • 字段操作(加减乘除)

原因:这个树可能会被破坏,而且这个树可能在正在被使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pI23CE3e-1646924316186)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310112129168.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rpeyA66M-1646924316187)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310112156423.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4WLZI6Dk-1646924316188)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220310112348785.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL索引是一种数据结构,可以帮助MySQL快速定位和访问表中的数据。使用索引可以提高查询效率,降低数据库的负载。下面是MySQL索引的一些基本概念和使用方法: 1. 索引类型 MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,B树索引是最常用的一种,也是默认的索引类型。B树索引可以用于精确匹配和范围查询,而哈希索引主要用于等值查询,全文索引则用于文本检索。 2. 索引创建 可以在创建表时指定索引,例如: ``` CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), INDEX idx_email (email) ); ``` 也可以在已有的表上添加索引,例如: ``` ALTER TABLE users ADD INDEX idx_name (name); ``` 3. 索引使用 查询语句中可以使用WHERE子句和ORDER BY子句来利用索引,例如: ``` SELECT * FROM users WHERE email = '[email protected]'; SELECT * FROM users WHERE name LIKE 'John%' ORDER BY id DESC; ``` 需要注意的是,索引并不是越多越好,过多的索引会占用过多的磁盘空间并降低写操作的性能。因此,需要根据实际情况选择合适的索引。同时,还需要定期对索引进行维护,包括优化查询语句、删除不必要的索引等。 4. 索引优化 MySQL提供了一些工具来优化索引,例如EXPLAIN命令可以帮助分析查询语句的执行计划,找出慢查询和不必要的全表扫描。可以使用OPTIMIZE TABLE命令来优化表的索引和碎片,从而提高查询性能。还可以使用缓存来避免频繁的查询操作,例如使用Memcached或Redis等缓存工具。 以上就是MySQL索引的一些基本概念和使用方法,需要根据实际情况进行选择和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值