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

性能优化-通过explain查询分析SQL执行计划

,如果查询使用了别名,那么这里显示是别名,如果不涉及对数据表操作,那么这显示null,如果显示尖括号括起来就表示这个是临时表,后边N就是执行计划中id,表示结果来自于这个查询产生。...,index,ALL,除了all之外,其他type都可以使用到索引,除了index_merge之外,其他type只可以用到一个索引 A:system:表中只有一行数据或者是空表,且只能用于myisam...或者多主键、唯一索引中,使用第一个之外列作为等值查找也会出现,总之,返回数据不唯一等值查找就可能出现。...留意下这个,算一下你索引总长度就知道有没有使用到所有的列了。要注意,mysqlICP特性使用索引不会计入其中。...,还有很多查询数据字典库,执行计划过程中就发现不可能存在结果一些提示信息 11)、filtered 使用explain extended时会出现这个,5.7之后版本默认就有这个字段,不需要使用explain

1.4K10

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4

翻译:   NULL在行中需要额外空间以记录其是否NULL。 对于MyISAM表,每个NULL都多花一位,四舍五入到最接近字节。...) 我们通过下面三个用例,结合数据库中表 demo0527 null 来看看: 示例一:通过 sum 函数统计一个只有 NULL 总和,比如 SUM(age); 示例二:select 记录数量...,count 使用一个允许 NULL 字段,比如 COUNT(name); 示例三:使用 =NULL 条件查询字段 NULL 记录,比如 money=null 条件。...(字段),不会统计 null ,COUNT(*) 才能统计所有行; MySQL 中使用诸如 =、 这样算数比较操作符比较 NULL 结果总是 NULL,这种比较就显得没有任何意义,需要使用...,不仅money=NULL 条件查不到字段 NULL 记录,当我们使用 SELECT * FROM demo0527 WHERE money 100; 来查询id=2这行时,也是查不到任何数据

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

带你看懂MySQL执行计划

,对于未分区表, NULL type 表访问方法 possible_keys 可能用到索引 key 实际用到索引 key_len 所选索引长度 ref 当使用索引等值查询时,与索引作比较或常量...这是查询SELECT 序号。如果该行引用其他行并集结果,则可以为 NULL 。当 id 相同时,执行顺序 由上向下;当 id 不同时,id 越大,优先级越高,越先执行。...table: 表示查询用到表名,每行都有对应表名,表名除了正常之外,也可能是以下列出: : 本行引用了 id M 和 N UNION 结果; <derivedN...是除了 system 与 const 之外最好 join 方式,常用于使用主键或唯一索引所有字段作为连表条件。 ref:使用普通索引作为查询条件,查询结果可能找到多个符合条件行。...如果这一 NULL ,则表示没有可能用到索引;这种情况下,需要检查 WHERE 语句中所使用,看是否可以通过给这些中某个或多个添加索引方法来提高查询性能。

1.6K40

Navicat Premium 技巧介绍 + MySQL性能分析

各个属性含义 属性 含义 id select查询序列号 id数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null就表是这是一个结果集,不需要使用它来进行查询 select_type...,index,ALL,除了all之外,其他type都可以使用到索引,除了index_merge之外,其他type只可以用到一个索引 A:system:表中只有一行数据或者是空表,且只能用于myisam...或者多主键、唯一索引中,使用第一个之外列作为等值查找也会出现,总之,返回数据不唯一等值查找就可能出现。...留意下这个,算一下你索引总长度就知道有没有使用到所有的列了。要注意,mysqlICP特性使用索引不会计入其中。...,还有很多查询数据字典库,执行计划过程中就发现不可能存在结果一些提示信息 filtered 使用explain extended时会出现这个,5.7之后版本默认就有这个字段,不需要使用explain

4.7K20

explain | 索引优化这把绝世好剑,你真的会用吗?

主要解决办法有: 监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql 打开数据库慢查询日志功能 简化业务逻辑 代码重构、优化 异步处理 sql优化 索引优化 其他办法先不说,后面有机会再单独介绍...idselect查询序号,比如:1、2、3、4等,它决定了表执行顺序。...此外,回答上面的问题:id允许空吗? 如果仔细看上面那张图,会发现id是可以允许,并且是在SELECT类型: UNION RESULT时候。...:子查询结果,其idN partitions表示查询将从中匹配记录分区 type表示连接类型,是查看索引执行情况一个重要指标。...上面的key可以看出有没有使用索引,key_len则可以更进一步看出索引使用是否充分。不出意外的话,它是最重要。 ? 有个关键问题浮出水面:key_len是如何计算

1.6K31

【MySQL系列】- MySQL执行计划一览

EXPLAINSELECT语句中使用每个表返回一行信息,它按照MySQL在处理语句时读取表顺序列出输出中表。...除了真实表可能出现3种表名如下: :通过union查询产生结果,M、N分别代表着执行计划id :N派生表id。...DEPENDENT UNION:对于包含 UNION 或者 UNION ALL 复杂查询来说,如果各个小查询都依赖于外层查询的话,那除了最左边那个小查询之外,其余查询 select_type...ref_or_null :有时候我们不仅想找出某个二级索引等于某个常数记录,还想把该NULL 记录也找出来,这个时候type就是ref_or_null。...,在 Extra 中会显示Using where;当使用索引访问来执行对某个表查询,并且该语句 WHERE 子句中有除了该索引包含之外其他搜索条件时,在 Extra 中也会显示Using

71620

MySQL优化之Explain命令解读

翻译:idSELECT标识符。它是在SELECT查询顺序编号。如果这一行表示其他行union结果,这个可以为空。...,range,index,ALL,除了all之外,其他type都可以使用到索引,除了index_merge之外,其他type只可以用到一个索引 A:system:表中只有一行数据或者是空表,且只能用于...或者多主键、唯一索引中,使用第一个之外列作为等值查找也会出现,总之,返回数据不唯一等值查找就可能出现。...:用于where中in形式子查询,子查询返回不重复唯一 I:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复,可以使用索引将子查询去重。...留意下这个,算一下你索引总长度就知道有没有使用到所有的列了。要注意,mysqlICP特性使用索引不会计入其中。

77530

MySQL中这14个小玩意,让人眼前一亮!!!

在MYSQL中获取当前时间,可以使用now()函数,例如: select now() from brand limit 1; 返回结果下面这样: 它会包含年月日时分秒。...如果你还想返回毫秒,可以使用now(3),例如: select now(3) from brand limit 1; 返回结果下面这样使用起来非常方便好记。...但如果brand表中已经存在name苏三数据了,则该sql语句也能正常执行,并不会报错。因为它会忽略异常,返回执行结果影响行数0,它不会重复插入数据。...、字段长度、是否允许空,是否主键、默认等信息。...例如: explain select * from `order` where code='002'; 结果: 通过这几列可以判断索引使用情况,执行计划包含含义如下图所示: 如果你想进一步了解

57750

要精通SQL优化?那就学一学explain吧!

`name` FROM tb_teacher t)) AS u; 代表是id2和3select查询结果进行union操作。 ?...四、partitions 表示SQL语句查询时匹配到分区信息,对于非分区表NULL,当查询是分区表则会显示分区表命中分区情况。...七、key 跟possible_keys有所区别,key表示查询中实际使用索引,若没有使用到索引则显示NULL。 八、key_len 表示查询用到索引key长度(字节数)。...九、ref 显示了哪些或常量被用于查找索引列上。常见有:const,func,null,字段名。 十、rows mysql估算要找到我们所需记录,需要读取行数。...可以通过这个数据很直观显示 SQL 性能好坏,一般情况下 rows 越小越好。 十一、filtered 指返回结果行占需要读到行(rows)百分比,一般来说越大越好。

55730

数据库优化方案之SQL脚本优化

,如果查询使用了别名,那么这里显示是别名,如果不涉及对数据表操作,那么这显示null,如果显示尖括号括起来 就表示这个是临时表,后边N就是执行计划中id,表示结果来自于这个查询产生。...,index,ALL,除了all之外,其他type都可以使用到索引,除了index_merge之外,其他type只可以用到一个索引 A:system:表中只有一行数据或者是空表,且只能用于myisam...或者多主键、唯一索引中,使用第一个之外列作为等值查找也会出现,总之,返回数据不唯一等值查找就可能出现。...留意下这个,算一下你索引总长度就知道有没有使用到所有的列了。要注意,mysqlICP特性使用索引不会计入其中。...12.不要写一些没有意义查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源,应改成这样

1.4K30

【MySQL】MySQL数据库进阶使用

除了insert冲突时,我们使用update更新这样语法外,我们也可以直接使用replace into进行表中数据替换,当表中有冲突数据时候,则删除冲突数据然后再插入,没有冲突数据时,则直接插入。...1.2 插入查询结果(删除表中重复记录) 1. insert除了直接插入数据外,还支持插入select查询结果,如果要删除表中重复记录,我们想要让这个操作是原子。...除此之外,实际公司使用MySQL数据库,存储数据最少也几百万条记录打底,一旦全查询,则查询结果会疯狂刷屏到显示器上,看也没法看,而且还有可能导致mysqld服务卡死,所以平常我们自己敲一些简单数据库...where子句是select查询时常用一个筛选条件,当where条件判断真时,select在会将查询结果显示出来,下面我们通过多个使用案例,来熟悉where条件使用以及逻辑运算符使用。...通过嵌入到其他sql语句中select语句返回结果,子查询又可以细分为单行子查询,多行子查询,多列子查询,子查询除了可以用在where子句充当筛选条件外,还可以用在from子句充当临时表,作笛卡尔积

27420

MySQL 教程上

WHERE、GROUP BY、HAVING 区别 where:数据库中常用是 where 关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。...group by: 对 SELECT 查询出来结果集按照某个字段或者表达式进行分组,获得一组组集合,然后从每组中取出一个指定字段或者表达式。...HAVING :用于对 WHERE和 GROUP BY 查询出来分组经行过滤,查出满足条件分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行过滤操作。...通过这些例子,可以明白如何根据需要使用 SELECT 进行试验。 LIMIT and OFFSET OFFSET 可以理解偏移量。若理解数据库查询下标从 0 开始。...INSERT SELECT列名 简单起见,这个例子在 INSERT 和 SELECT 语句中使用了相同列名。但是,不一定要求列名匹配。事实上,MySQL 甚至不关心SELECT 返回列名。

3.4K10

Oracle数据库之单行函数详解

函数名称 描述 1 NVL(数字| , 默认) 如果显示数字是null的话,则使用默认数值表示 2 NVL2(数字|,返回结果一(不为空显示),返回结果二(空显示)) 判断指定是否是null...,如果不为null返回结果一,空则返回结果二 3 NULLIF(表达式一,表达式二) 比较表达式一和表达式二结果是否相等,如果相等返回NULL,如果不相等返回表达式一 4 DECODE(|,判断...,默认) 多值判断,如果某一个(或一个)与判断相同,则使用指定显示结果输出,如果没有满足条件,在显示默认 5 CASE |数值 WHEN 表达式1 THEN 显示结果1 ......, DECODE() 6.6.1 使用 NVL() 函数处理 null 在数据库之中,null 是无法进行计算,即,在一个数学计算之中如果存在了 null,则最后结果也肯定是 null 范例:查询出每个雇员编号...NVL2() 函数 NVL2() 函数是在 Oracle 9i 之后增加一个新功能函数,相比较 NVL() 函数,NVL2() 函数可以同时对 null 或不为 null 进行分别判断并返回不同结果

2.6K10

Java面试——数据库

这是在存储引擎层完成。 【2】使用索引覆盖扫描(Extra 中出现了 Using index)来返回记录,直接从索引中过滤不需要记录并返回命中结果。...如果查询中包含可为 NULL ,对 MySQL 来说更难优化,因为可为 NULL 使得索引、索引统计和比较都更复杂。 【2】根据业务表特点进行范式或者反范式设计。...TERMINATED BY ','; 我们还可以通过分离 REPLACESELECT 部分,把结果返回给应用程序,然后将其插入到主库中。...; 【解决方案三】:在复制之外并行写入:另一种避免备库严重延迟办法是绕过复制。自己复制数据到另外一台服务器,而不是通过复制。特别是复核瓶颈通常集中在一些小部分表上。...开始执行时候,要先判断一下你对这个表 T 有没有执行查询权限,如果没有,就会返回没有权限错误,如果有权限,就打开表继续执行。打开表时候,执行器就会根据表引擎定义,去使用这个引擎提供接口。

53940

掌握mysql这些操作,让你事半功倍

mysql 是日常开发中常用关系型数据库,除了 CRUD 之外操作,mysql 也有很多有趣而且巧妙操作,掌握这些技巧,可以在工作中得心应手、游刃有余。...mysql 中 select 神奇用法, select 不仅可以用来执行 DQL,还可以用来查询变量和数学运算。 mysql 多查询配合联合索引正确用法, 比如 in 查询操作。...◆ 数字操作 关于数字操作,除了在开发中常用聚合方法, sum, max ,min, avg 之外,还有字符串格式化展示,四舍五入操作。...select 可以用来查询函数运算结果,这个在前文中已多次使用,比如 select reverse("abcdef");除此之外select 还可以用来四则运算,比如 select 1 + 2 。...) as 'result' from tb_user # 如果结果null,给出计算默认 select ifnull(sum(age),0) from tb_user 执行结果如图: ◆ 多

70120

Mysql优化-索引

,index,ALL,除了all之外,其他type都可以使用到索引,除了index_merge之外,其他type只可以用到一个索引 possible_keys 显示可能应用在这张表中索引。...留意下这个,算一下你索引总长度就知道有没有使用到所有的列了。要注意,mysqlICP特性使用索引不会计入其中。...除了all之外,其他type都可以使用到索引。 除了index_merge之外,其他type只可以用到一个索引。...或者多主键、唯一索引中,使用第一个之外列作为等值查找也会出现,总之,返回数据不唯一等值查找就可能出现。...unique_subquery 用于where中in形式子查询,子查询返回不重复唯一 index_subquery 用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复,可以使用索引将子查询去重

1.3K50

explain | 索引优化这把绝世好剑,你真的会用吗?

explain介绍 先看看mysql官方文档是怎么描述explain: EXPLAIN可以使用SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。...idselect查询序号,比如:1、2、3、4等,它决定了表执行顺序。...此外,回答上面的问题:id允许空吗? 如果仔细看上面那张图,会发现id是可以允许,并且是在SELECT类型: UNION RESULT时候。...:子查询结果,其idN partitions表示查询将从中匹配记录分区 type表示连接类型,是查看索引执行情况一个重要指标。...key_len 该列表示使用索引长度。上面的key可以看出有没有使用索引,key_len则可以更进一步看出索引使用是否充分。不出意外的话,它是最重要

98420

MySQL中SQL执行计划详解

具体表示如下表: select_type 含义 SIMPLE 简单select查询,没有使用关联和子查询。...SELECT查询时候需要依赖外部查询 UNION RESULT UNION返回结果集 SUBQUERY 子查询语句第一个select语句 DEPENDENT SUBQUERY 依赖外部查询第一个子查询...3.eq_ref 除了 system和 const类型之外,这是最好连接类型。当两个表联查时使用索引所有部分(针对是组合索引),且索引是 主键或唯一索引时使用它。...使用“=”运算符来进行索引比较。   4.ref 非唯一索引扫描,返回某个匹配所有行。常用语非唯一索引。...6.ref_or_null 这种链接类型类似于ref,但是,除了ref之外,还对包含null进行了搜索。常用于解析子查询

3K20
领券