MYSQL索引

MYSQL索引

  • 聚集索引(主键索引):是一种存储方式。InnoDB 的聚簇索引实际上在同一个结构中保存了 B-Tree 索引和数据行,非叶子结点储存索引,叶子结点储存完整的数据记录
  • 非聚集索引:(MYISAM)索引文件和数据文件分离
  • 辅助索引(二级索引):非主键索引,叶子节点=主键值+书签
  • 覆盖索引:就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖,也即,索引包含了查询正在查找的所有数据
    • 当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息,从执行结果上看,这个SQL语句只通过索引,就取到了所需要的数据,这个过程就叫做索引覆盖
  • 全文索引:先建立索引,再对索引进行搜索的过程就叫全文检索

优势:

  • 提高数据检索的效率,降低磁盘IO成本
  • 数据排序,降低CPU消耗

劣势:

  • 索引本质也是一张表,保存着索引字段和指向实际记录的指针,所以也要占用数据库空间,一般而言,索引表占用的空间是数据表的1.5倍
  • 索引虽然能提高查询速度,但是会降低表的更新速度,因为更新数据时,也要更新索引

基本语法:

--创建
CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length));
ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(lenght));
--删除
DROP INDEX [indexName] ON mytable;
--查看
SHOW INDEX FROM table_name\G

3.1 B+Tree索引

在这里插入图片描述

存储结构

存储器范围比较大,但是数据具体怎么存储,有自己的最小存储单元。

1、数据持久化存储磁盘里,磁盘的最小单元是扇区,一个扇区的大小是 512个字节

2、文件系统的最小单元是一个块的大小是 4K

3、InnoDB存储引擎,有自己的最小单元,称之为****,一个页的大小是16K

B+ 树是如何检索记录?

  • 首先找到根页,你怎么知道一张表的根页在哪呢?
  • 其实每张表的根页位置在表空间文件中是固定的,即page number=3的页
  • 找到根页后通过二分查找法定位到id=5的数据应该在指针P5指向的页中
  • 然后再去page number=5的页中查找,同样通过二分查询法即可找到id=5的记录

特别说明:

  • 查询数据库时,不论读一行,还是读多行,都是将这些行所在的整页数据加载,然后在内存中匹配过滤出最终结果。

  • 表的检索速度跟树的深度有直接关系,毕竟一次页加载就是一次IO,而磁盘IO又是比较费时间对于一张千万级条数B+树高度为3的表与几十万级B+树高度也为3的表,其实查询效率相差不大。

    千万级的数据存储只需要约3层B+树,查询数据时,每加载一页(page)代表一次IO。所以说,根据主键id索引查询约3次IO便可以找到目标结果。
    

3.2 hash索引

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值