在一颗索引树上由多个字段
优势: 效率高, 省空间, 容易形成覆盖索引
使用:
遵循最左前缀原则
1, 前缀索引
like 常量 % 使用索引 like % 常量 不使用索引
2, 最左前缀
从左向右匹配直到遇到范围查询 > < between 索引失效
2, 索引失效
查看索引计划: EXPLAIN 命令
可以通过 explain 命令深入了解 MySQL 的基于开销的优化器, 还可以获得很多可
能被优化器考虑到的访问策略的细节, 以及当运行 SQL 语句时哪种策略预计会被优化器采用.
eg: explain select * from user where id = 1
- *************************** 1. row ***************************
- id: 1
- select_type: SIMPLE
- table: user_info
- partitions: NULL
- type: const
- possible_keys: PRIMARY
各列的含义如下:
id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
select_type: SELECT 查询的类型.
table: 查询的是哪个表
partitions: 匹配的分区
type: join 类型
possible_keys: 此次查询中可能选用的索引
key: 此次查询中确切使用到的索引.
ref: 哪个字段或常数与 key 一起被使用
rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
fifiltered: 表示此查询条件所过滤的数据的百分比
extra: 额外的信息
id
每个单位查询的 SELECT 语句都会自动分配的一个唯一标识符, 表示查询中操作表的顺序,
有四种情况:
id 相同: 执行顺序由上到下
id 不同: 如果是子查询, id 号会自增, id 越大, 优先级越高.
id 相同的不同的同时存在
id 列为 null 的就表示这是一个结果集, 不需要使用它来进行查询.
select_type(重要)
单位查询的查询类型, 比如: 普通查询, 联合查询 (union,union all), 子查询等复杂查询.
包括
simple
表示不需要 union 操作或者不包含子查询的简单 select 查询. 有连接查询时,
外层的查询为 simple, 且只有一个
primary
一个需要 union 操作或者含有子查询的 select, 位于最外层的单位
查询的 select_type 即为 primary. 且只有一个
union
union 连接的两个 select 查询, 第一个查询是 dervied 派生表, 除
了第一个表外, 第二个以后的表 select_type 都是 union
dependent union
与 union 一样, 出现在 union 或 union all 语句中, 但是这个查询要
受到外部查询的影响
union result
包含 union 的结果集, 在 union 和 union all 语句中, 因为它不需要参
与查询, 所以 id 字段为 null
subquery
除了 from 字句中包含的子查询外, 其他地方出现的子查询都可能
是 subquery
dependent subquery
与 dependent union 类似, 表示这个 subquery 的查询要受到外部表
查询的影响
derived
from 字句中出现的子查询, 也叫做派生表, 其他数据库中可能叫
做内联视图或嵌套 select
来源: https://www.cnblogs.com/vindycxy/p/12685130.html