首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你会看 MySQL 的执行计划(EXPLAIN)吗?

查询匹配的分区(没有进行表分区,则为 NULL)typeaccess_type连接类型possible_keyspossible_keys可以选择的索引keykey实际上用到的索引key_lenkey_length...NULL 时,table 列值为 格式,表示该行为 id 为 m 和 n 联合的结果 id 顺序的规则:如果 id 相同,执行顺序由上到下;如果不同,执行顺序由大到小。...,则最外层的查询被标识为 PRIMARYUNION/UNION 中的第二个或更后面的 SELECT 语句DEPENDENT UNIONdependent (true)UNION 中的第二个或更后面的 SELECT...将子查询的结果物化(生成临时表)UNCACHEABLE SUBQUERYcacheable (false)结果无法缓存且必须为外部查询的每一行重新计算的子查询UNCACHEABLE UNIONcacheable...,如:id = 1,值为 const;如果是联合查询或者子查询则为关联的字段;如果使用了函数,则为 func。

41530

查看Mysql执行计划

第一个查询是全表扫描,第二个是索引扫描: 区别在于type:all是全表扫描 index 通过索引扫描 或者在查询中输入需要查看执行计划的语句,点击执行,然后点击解释。...从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL 说明:不同连接类型的解释(按照效率高低的顺序排序)system:系统表,表中只有一行数据。...如果为空,没有可能的索引,可以为相关的域从WHERE语句中选择一个合适的语句 4、key 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。...如果连接操作只使用键的最左前缀,或者如果键不是 UNIQUE或PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。...如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题。

3.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL高级--性能优化之Explain分析SQL

    eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。 常见于主键或唯一索引扫描。 ref: 非唯一性索引扫描,返回匹配某个单独值的所有行。...本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以它应该数据查询和扫描的混合体。 range: 只检索给定范围的行,使用一个索来选择行。...(虽然 ALL 和 index都是全读,但是ALL是从磁盘上读取原始数据,而index是读取全部的索引。) all: Full Table Scan ,将遍历源数据的全表以找到匹配的数据。...1.6 显示可能应用在这张表中的索引 possible_keys :查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。如果没有则为NULL。...这里创建的是一个聚合索引(col1,col2,col3),第二个SQL没有提示使用文件内部排序是因为使用列按照了索引的顺序(col1->col2->col3),但是第一个SQL没有使用到col2,产生了一个断层

    93430

    mysql的explain详解

    我们在实际业务中经常会使用到explain,因为这里涉及到查询,下面我们来看一个例子,比如我们要查一本书的上一章或者下一章,我们的sql是这样: 查询5164这本书4054495这一章的上一章:下面的是...:表中最多有一个匹配行,const用于比较primary key 或者unique索引。...因为只匹配一行数据,所以很 eq_ref:唯一性索引扫描,对于每个来自于前面的表的记录,从该表中读取唯一一行 ref:非唯一性索引扫描,对于每个来自于前面的表的记录,所有匹配的行从这张表取出 ref_or_null...例如:select name from student,但name字段上需要建立索引,也就是查询的字段属于索引中的字段。 all:全表扫描,扫描完整的物理表,此时就需要优化了。...小的表)进行连接的行的数目。

    39730

    Java面试之数据库面试题

    如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用?...内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。...右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。...第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上 15...,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

    1.5K20

    Hadoop数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)离线数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)

    select命令详解 select命令和表中sql中的定义是一样的,都是查询数据表的数据,命令格式如下所示: SELECT [ALL | DISTINCT] select_expr, select_expr...内连接语法 内连接(JOIN)主要作用是获取连接的两张表全部匹配的数据,如果不给定join_condition的话,会进行笛卡尔乘积。...左外连接(LEFT OUTER JOIN)的结果是包括左表中的所有行,如果左表中的某一个行在右表中不存在,那么则在相关联的结果集中右表的所有选择列值均设置为空值。...右外连接(RIGHT OUTER JOIN)就是左外连接的反先连接,将返回右表的所有行,左表进行空值填充。...全外连接(FULL OUTER JOIN)返回左表和右表的所有行,关联表中没有匹配值的直接设置为空值。

    78050

    数据库经典面试题,都给你收集好了!!!

    如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用?...内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。...右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。...第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上 15...,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

    1.6K30

    Java面试之数据库面试题

    如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用?...内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。...右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。...第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上 15...,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

    1.5K41

    数据库常见的面试题大全

    如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用?...内连接、自连接、外连接(左、右、全)、交叉连接 内连接:只有两个元素表相匹配的才能在结果集中显示。 外连接: 左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。...右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。 全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。...第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上 15...,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

    1.4K40

    mysql数据库关键字及用法_mysql唯一索引关键字

    PRIMARY:主查询或者包含子查询时最外层的查询语句。 UNION:当前SQL语句是连接查询时,表示连接查询的第二个SELECT语句或者第二个后面的SELECT语句。...(4)partitions:如果当前数据表是分区表,则表示查询结果匹配的分区。...index_merge> unique_subquery > index_subquery > range > index > ALL system:查询的数据表中只有一行数据,是const类型的特例。...const:数据表中最多只有一行数据符合查询条件,当查询或连接的字段为主键或唯一索引时,则type的取值为const。...简单示例如下: eq_ref:如果查询语句中的连接条件或查询条件使用了主键或者非空唯一索引包含的全部字段,则type的取值为eq_ref,典型的场景为使用“=”操作符比较带索引的列。

    1.9K70

    【MySQL】02_子查询与多表查询

    # 其中,若员工department_id与location_id为1800 的department_id相同,则locatio为’Canada’,其余则为’USA’ SELECT employee_id...`employee_id`; 非自连接:上面写的都属于非自连接 角度3:内链接 vs 外链接 内连接 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行 外连接 两个表在连接过程中除了返回满足连接条件的行以外还返回左...没有匹配的行时, 结果表中相应的列为空(NULL)。 如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。...满外连接 满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。 SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。...我们可以把 自然连接理解为 SQL92 中的等值连接。它会帮你自动查询两张连接表中 所有相同的字段 ,然后进行 等值连接 。

    2.8K40

    explain 深入剖析 MySQL 索引及其性能优化指南

    只有那些使为真的行才被插入VT2 OUTER(JOIN):如果指定了OUTER JOIN,保留表中未找到匹配的行将作为外部行添加到VT2,生成VT3。...如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题 先说到这,下面一篇给大家总结下如何选择索引列以及使用索引的注意事项。...从最好到最差的连接类型为 const、eq_reg、ref、range、index和ALL。 possible_keys 显示可能应用在这张表中的索引。如果为空,没有可能的索引。...它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。...如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)。 system 表只有一行 system 表。

    1.8K60

    SQL查询的高级应用

    =email FROM testtable 4.删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。...(项1,项2……) 模式匹配符(判断值是否与指定的字符通配格式相符):LIKE;  NOT LIKE 空值判断符(判断表达式是否为空):IS NULL;  NOT IS NULL 逻辑运算符(用于多条件的逻辑连接...与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。...交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

    3K30

    MySQL 调试篇

    它会先取出第一个表的第一行记录,然后去匹配下一个表的所有行,接着再匹配下一个表,知直到所有的表匹配完毕后,取出各个表需要查询的字段。...: user_account 作为驱动表先取出符合条件的数据,这里没有 where 就取第一行 “张三” 数据了,第一张表拿到第一行数据然后去被驱动表匹配数据,匹配到了 account_info 表中...如果是使用子查询没有被优化器优化成多表连接的话最外层的查询就是 PRIMARY。如果是使用 union 或者 union all,最左边的就是 PRIMARY。...table(JSON-[table_name])输出行所引用的表。partitions匹配记录的分区。非分区表该值为 null。type (JSON-[access_type])连接的类型。...FROM tbl_name 这样的查询,被查询的表是空的。Deleting all rows对于一些支持简单快速删除所有表数据的存储引擎,如果被优化器使用则会显示当前选项。

    20911

    MySQL:DQL 数据查询语句盘点

    NULL,则结果为真 BETWEEN a BETWEEN b and c 若a范围在b与c之间,则结果为真 LIKE a LIKE b SQL模式匹配,若a匹配b,则结果为真 IN a IN (a1,a2...查询的字段X的值,至少与括号中的一个值相同,多个值之间用英文逗号隔开 7、NULL空值条件查询 NULL代表"无值" 区别于零值0和空字符串"" 只能出现在定义允许为NULL的字段 须使用IS NULL...FROM 表1 别名1,表1 别名2; 数据表与自身进行连接 6、外连接(out join)——左连接 从左表(table_1)中返回所有的记录,即便在右表(table_2)中没有匹配的行 SELECT...,即便在左表(table_1)中没有匹配的行 SELECT 字段1,字段2,......) 如果表中至少有一个匹配,则返回行 LEFT JOIN 无论右表是否有匹配,都会返回左表的所有行 RIGHT JOIN 无论左表是否有匹配,都会返回右表的所有行 9、full join mysql

    1.6K20

    MySQL 数据库基础知识(系统化一篇入门)

    ZEROFILL 0填充的 不足位数的用0来填充 , 如int(3),5则为005 Auto_InCrement 通常理解为自增,自动在上一条记录的基础上默认+1...所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。...7.4.1、交叉连接 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡儿积。...MySQL:语法格式: select * from 表1,表2; 由于这个交叉连接查询在实际运用中没有任何意义,所以只做为了解即可 7.4.2、内链接查询(自然连接,等值链接) 内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行...如果右表的某条记录在左表中没有匹配,则左表将返回null。

    5.1K60

    高效处理MySQL慢查询分析和性能优化

    table:查询涉及的表名。partitions:查询涉及的分区,如果没有分区则为NULL。type:连接类型,如ALL(全表扫描)、INDEX(索引扫描)、range(范围扫描)等。...这里显示的是ALL,表示进行了全表扫描。possible_keys:可能使用的索引列表,如果没有可能的索引则为NULL。key:实际使用的索引,如果没有使用索引则为NULL。...ALLFull Table Scan,MySQL将遍历全表以找到匹配的行。这个表格可以帮助你理解MySQL如何执行不同类型的查询,从而更好地进行SQL性能优化。...如果这个字段为空,那么表示MySQL没有找到任何可能有助于查询的索引。...key字段的值将是上述类型之一,或者是表上定义的具体索引名称。如果key字段为空,这意味着MySQL在执行查询时没有使用任何索引。

    68822

    《SQL必知必会》万字精华-第1到13章

    行 表中的数据是按照行来进行存储的,所保存的每个记录存储在自己的行内。如果把表想象成一个网格,那么网格中垂直的列则为表列,水平则为表行。 行表示的是一个记录。行有时候也称之为记录。...AND...联合使用 空值检查 当我们创建表的时候,可以指定其中的列是否包含空值。在一个列不包含值时,称其包含空值NULL。...()函数会忽略指定列的值为空的行,但是如果COUNT()函数使用的是星号,则不会忽略 3、MAX()/MIN()函数 返回指定列中的最大值或者最小值 SELECT MAX(prod_price) AS...WHERE order_num = 20005; 笔记:SUM()函数会自动忽略值为NULL的行 聚集不同值 上面的5个聚集函数都可以如下使用: 对所有的行执行计算,指定ALL参数或不指定参数(因为ALL...WHERE子句来指定联结条件,则返回的是笛卡尔积,返回出来数的行就是第一个表中的行乘以第二个表中的行。

    7.1K00

    详解Mysql执行计划explain

    ,第二个是索引扫描: 区别在于type:all是全表扫描 index 通过索引扫描 或者在查询中输入需要查看执行计划的语句,点击执行,然后点击解释。...从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL 说明:不同连接类型的解释(按照效率高低的顺序排序) system:系统表,表中只有一行数据。...如果为空,没有可能的索引,可以为相关的域从WHERE语句中选择一个合适的语句 key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度...如果连接操作只使用键的最左前缀,或者如果键不是 UNIQUE或PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。...如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题。

    95820
    领券