乐趣区

关于redis:知识点问答

Q1:
select count(*) from t;
t 中有 id(主键),name,age,sex4 个字段,假如数据 10 条,对 sex 增加索引,用 explain 查看执行打算发现用了 sex 索引,为什么不是主键索引呢?

A1:

  1. MySQL Innodb 的主键索引是一个 B + 树,数据存储在叶子节点上,10 条数据,就有 10 个叶子节点;
  2. sex 索引是辅助索引,也是一个 B + 树,不同之处在于,叶子节点存储的是主键值,因为 sex 只有 2 个可能的值:男和女,因而,这个 B + 树只有 2 个叶子节点,比主键索引的 B + 树小的多;
  3. 这个表有主键,因而不存在所有字段都为空的记录,所以 COUNT(*) 只有统计所有主键的值就能够了,不须要回表读取数据;
  4. SELECT COUNT(*) FROM t,应用 sex 索引,只须要拜访辅助索引的小 B + 树,而应用主键索引,要拜访主键索引的那个大 B + 树,明细工作量大,这就是优化器应用辅助索引的起因。
退出移动版