MySQL(2)——索引

索引

1. 什么是索引?

  • 索引是帮助MySQL高校获取数据的数据结构
  • 索引存储在文件系统中
  • 索引的文件存储形式与存储引擎有关
  • 索引文件的结构
    • hash
    • 二叉树
    • B树
    • B+树

2. 索引的分类

MySQL索引有五种类型。通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。

  • 主键索引

    主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。

  • 唯一索引

    索引列的所有值只能出现一次,即必须唯一,值可以为空。

  • 普通索引

    基本的索引类型,值可以为空,没有唯一性的限制。

  • 全文索引

    全文索引的索引类型为FULLTEXT。全文索引可以在Varchar、char、text类型的列上创建

  • 组合索引

    多列值组成一个索引,专门用于组合搜索

索引使用过程中出现的情况:

  1. 回表

    ​ 使用非主键索引进行查询时,先通过索引查找到记录的主键,再使用主键索引查询到数据。查询了两次索引,被称为回表。

  2. 最左匹配

    建立索引 age,gender
    
    执行查询:
    # 会使用索引
    SELECT * FROM student WHERE age = ? AND gender = ?
    # 会被mysql的SQL优化器优化,然后使用age,gender索引
    SELECT * FROM student WHERE gender = ? AND age = ?
    # 不会使用索引,因为匹配不到gender
    SELECT * FROM student WHERE gender = ?
    # 会使用索引,因为匹配到了age
    SELECT * FROM student WHERE age = ?
    
    这种情况被称为mysql的最左匹配原则
    
  3. 索引覆盖

    ​ 使用非主键索引查询主键id时,通过非主键索引查找到记录的主键,而不需要再去通过主键索引查询数据时,被称为索引覆盖。

  4. 索引下推

    建立索引:age,gender
    进行查询:
    SELECT * FROM student WHERE age = ? AND gender = ?
    在没有索引下推前:先根据age进行查询,然后将查询结果再通过gender筛选,得到最终结果
    使用了索引下推后:直接在存储引擎层根据age和gender拉取数据,一起得到最终结果。
    

    3. 索引的实现

    InnoDB:

    • 表数据文件本身就是按B+ Tree组织的一个索引结构文件
    • 聚集索引-叶节点包含了完成的数据记录
    • InnoDB表必须要有主键,且推荐使用整型的自增主键
    • 非主键叶子节点存储的是主键值 (一致性和节省存储空间)

    MyISAM:

    • 表数据和索引结构分别存储在不同的文件当中
    • 非聚簇索引,只在节点中存储记录的地址(在数据文件中的地址)

详细内容:

http://blog.codinglabs.org/articles/theory-of-mysql-index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值