使用索引的场景

December 21, 2020
mysql
  1. where 后的字段:
SELECT id, name FROM users WHERE name = '张三';

where 中的 name 字段可以通过添加索引优化查询速度。

  1. join 查询的 on:
SELECT 
  e.name, 
  t.title 
FROM 
  employees e 
  LEFT JOIN titles t ON t.emp_no = e.emp_no;

emp_no 可以加索引加速查询。

  1. order by 字段:
    order by 后的字段可以利用 B+ 树索引的顺序性。

  2. 覆盖索引:
    如果用户表 users 包含 id, name, age, gender 四个字段, id 是自增主键,创建普通索引 idx_name_age on (name,age)。

SELECT name, age, gender FROM users WHERE name = '张三';

上面的语句将会查询两个树,一颗普通索引树,一颗主键索引树。先在普通索引树通过 name 找到主键 id,再在主键索引树查询 name, age, gender 数据。

SELECT name, age FROM users WHERE name = '张三';

而上面的这个 sql 查询只需要查询普通索引树,因为普通索引树中已经包含 name 和 age,没有必要再查询主索引树了。

参考:
索引使用场景(重点) - CSDN
联合索引的 B+ 树结构:联合索引在B+树上的存储结构及数据查找方式 - 掘金
联合索引为什么能够使用覆盖索引:MySQL 覆盖索引详解 - 掘金

Character Sets and Collations

mysql

char vs varchar

mysql