image.png
    以上是项目中用的一条sql对应的执行计划,可以看到第一行的select_type是PRIMARY,table是,通过查看资料可知。

    image.png

    1. 派生表是FROM后面内嵌查询,相当于子查询。
    2. 子查询中不允许出现同名字段(别名),这就导致可能会出现一个情况,若你所在项目的分页由框架统一实现,且实现原理是在原sql基础上套多一层select * from (xxx) limit 10,那么如果你的写sql的时候不小心写多个相同字段,该sql在数据库客户端执行是没问题的,但是程序一执行就会报错。

    image.png
    派生表约束:

    1. 派生表不能是关联子查询
    2. 派生表不允许在相同select语句中引用其他table的字段
    3. 派生表不允许包含外部引用,这个属于mysql特有约束,非标准sql约束

    image.png
    关于派生表优化(这里指的是mysql自己的优化,不是我们去优化派生表)(派生表类似于临时表,所以创建也需要性能消耗所以越晚创建越好):

    1. 为了提高性能,派生表将延迟被创建直到查询结果需要被真正用到
    2. 一些非执行计划的sql语句也非一定要创建派生表才能执行,如果sql关联查询其他表且未找到匹配结果,此时关联查询将不再继续且优化器将完全跳过创建派生表
    3. 执行查询过程,优化器将会为派生表添加索引来提高检索速度

    mysql官方文档解释:https://dev.mysql.com/doc/refman/5.6/en/derived-tables.html
    关于派生表优化:https://dev.mysql.com/doc/refman/5.6/en/derived-table-optimization.html