为什么建议InnoDB表必须建主键?并且推荐使用整型的自增主键?
如果不由我们人工去创建主键,mysql也会帮我们去建立主键,没有必要把这么简单地工作交给Mysql。
整型比较比UUID比较要快,而且更加节省空间。
设置自增有一个考虑就是在插入元素数据的时候由于需要维护一颗B+树,这颗树根据主键排序的,为了维护树平衡,需要一定的时间开销,设置主键自增之后,直接往后面追加元素即可,减少了时间开销。
为什么非主键索引结构叶子节点存储的是主键值?
为了一致性和节省存储空间。
explain extended 可以多展示哪些字段?
filtered,这个和mysql版本有关,有的mysql版本不加extended关键字,也可以展示这个字段。
这是一个半分比的值, rows * filtered / 100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 expalin 中的id值比当前表id值小的表)。
explain partitions可以多展示哪些字段?
partitions, 如果查询基于分区表的话,会显示查询将访问的分区。
怎么查看mysql帮我们做了哪些优化?
在执行完了explain之后,可以使用sho warnings语句查看mysql帮我们执行哪些优化。
explain select_type列的含义?
select_type 表示对应简单还是复杂查询。
1)simple:简单查询,查询不包含子查询和union
2)primary:复杂查询中最外层的select
3)subquery:包含在select中的子查询(不在from 子句中)
4)derived:包含在from子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)
5)union:在union中的第二个和随后的select
explain typ列有什么含义?
这一列表示关联类型,即MySQL决定如何查找表中的行,查找数据记录的最大范围。
依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL。
一般来说,得保证查询达到range级别,最好达到ref。
NULL: mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如: 在索引列中选取最小值,可以单独查找索引来完成,不需要在执行时访问表。
const, system; myq能对查询的某部分进行优化并将其转化成一个常量(可以看show wanings 的结果)。用于 primary key 或 unique key 的有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。system是const的特例,表里只有一条元组匹配时为system。
eq_ref: primary key 或 unique key 索的所有部分被连接使用,最多只会返回一条符合条件的记录。这可能是在 onst 之外最好的联接类型了简单的 select 查询不会出现这种 type。
ref:相比 e r,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行.
标签:Explain,mysql,查询,索引,explain,Mysql,数据结构,主键,select From: https://www.cnblogs.com/zhf123/p/17259853.html