const(级别)
使用主键索引或者唯一的二级索引去查一条记录时。
ref
- 采用二级索引来执行查询的访问方法称为:ref。
- 如果匹配的记录较少,则回表的代价还是比较低的,所以MySQL可能选择使用索引而不是全表扫描的方式来执行查询。
ref_or_null
有时候我们不仅想找出某个二级索引列的值等于某个常数的记录,还想把该列的值为NULL的记录也找出来
range
利用索引进行范围匹配的访问方法称之为:range。
index
采用遍历二级索引记录的执行方式称之为:index。
all
全表扫
连接原理
左外连接 left join
以左边表作为驱动表,右边的表为被驱动表,以左边的表进行遍历去找右边与之匹配的记录,如果左边没有右边匹配的记录,该记录也会展示,只是显示的值为Null
例如:
右外连接
以右边的表作为驱动表
内连接
内连接和外连接的根本区别就是在驱动表中的记录不符合ON子句中的连接条件时不会把该记录加入到最后的结果集,
嵌套循环连接(Nested-Loop Join)
这种驱动表只访问一次,但被驱动表却可能被多次访问,访问次数取决于对驱动表执行单表查询后的结果集中的记录条数的连接执行方式称之为嵌套循环连接(Nested-Loop Join),这是最简单,也是最笨拙的一种连接查询算法。
基于块的嵌套循环连接(Block Nested-Loop Join)
join buffer就是执行连接查询前申请的一块固定大小的内存,先把若干条驱动表结果集中的记录装在这个join buffer中,然后开始扫描被驱动表,每一条被驱动表的记录一次性和join buffer中的多条驱动表记录做匹配,因为匹配的过程都是在内存中完成的,所以这样可以显著减少被驱动表的I/O代价。
- join_buffer_size进行配置,默认大小为262144字节(也就是256KB),最小可以设置为128字节。