首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试前必须知道的MySQL命令【expalin】

    1.2为什么需要explain命令 我们很多时候编写完一条SQL语句,往往想知道这条SQL语句执行是否高效。...或者说,我们建立好的索引在这条SQL语句中是否使用到了,就可以使用explain命令来分析一下!...range:范围扫描,就是一个有限制的索引扫描,它开始于索引里的某一点,返回匹配这个值域的行。...ref:一种索引访问,也称索引查找,它返回所有匹配某个单个值的行。此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了最左前缀规则索引的查询。...当然了,在《高性能MySQL》中也有复杂的SQL语句来分析(但我认为我们一般不会写到那么复杂)..

    1.2K20

    SQL优化指南

    一、慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...(有时候不一定,我看到很多博客讲的是超过指定秒数,但我实验得出的结果是达到指定秒数) 二、EXPLAIN 点对点分析你 explain是一个神奇的命令,可以查看sql的具体的执行计划。...五、优化group by 语句 为什么order by后面不能跟group by ?...事实上,MySQL在所有的group by 后面隐式的加了order by ,也就是说group by语句的结果会默认进行排序。...八、改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全表扫描。。。

    96820

    SQL优化指南

    慢查询日志 开启撒网模式     开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。...(有时候不一定,我看到很多博客讲的是超过指定秒数,但我实验得出的结果是达到指定秒数) EXPLAIN 点对点分析你   explain是一个神奇的命令,可以查看sql的具体的执行计划。...优化group by 语句 为什么order by后面不能跟group by ?   ...事实上,MySQL在所有的group by 后面隐式的加了order by ,也就是说group by语句的结果会默认进行排序。   ...改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全表扫描。。。

    93520

    SQL优化思路+经典案例分析

    unique_subquery:类似于eq_ref,条件用了in子查询 index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值。...简单点说,这个字段表示存储引擎返回的数据在经过过滤后,剩下满足条件的记录数量的比例。...如下: 如果给数字加上'',也就是说,传的是一个字符串呢,当然是走索引,如下图: 为什么第一条语句未加单引号就不走索引了呢?...in元素一般建议不要超过200个,如果超过了,建议分组,每次200一组进行哈。...方向1:既然它默认会排序,我们不给它排是不是就行啦。 方向2:既然临时表是影响group by性能的X因素,我们是不是可以不用临时表? 我们一起来想下,执行group by语句为什么需要临时表呢?

    1.3K10

    Java如何定位自己项目中的慢业务

    定位慢业务问题 首先我们先来说这么慢业务问题,一般的慢业务问题,总归就那么几种,SQL 问题,代码业务问题,前端解析问题,前端的解析问题我们就不说了,为什么呢?...比如说,我们要初始化一个列表,预置12个月的数据给前端 List list = new ArrayList(); for(int i = 0 ; i 为什么呢?因为阿粉在之前的文章中已经详细的讲过了,大家如果有兴趣的话,可以翻看一下。...慢查询日志记录慢SQL 定位慢SQL可以通过慢查询日志来查看慢SQL,默认的情况下,MySQL数据库不开启慢查询日志(slow query log),需要手动把它打开 SET GLOBAL slow_query_log...:类似于eq_ref,条件用了in子查询 index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值 range:常用于范围查询,比如:between … and

    85020

    PostgreSQL逻辑优化——整体架构

    小编说:PostgreSQL作为一个优秀的数据库产品,其本身有着非常多值得学习和研究的地方。...从下图中的Call Stack我们可以看出planner与subquery_planner之间的调用关系。 ? 函数以查询树作为输入参数,并以优化后语句作为返回值。...完成对tuple_faction的设置后,进入后续优化流程,subquery_planner的函数原型如下所示。 ? 这里也许读者会迷惑,为什么是subquery_planner呢?...从名字上看该函数像是用来处理子查询,那么为什么用来作为整个查询语句优化的入口呢(Primary Entry Point)?...那么subquery_planner函数似乎也应该有相应于这些语句的优化处理。就这点而言,subquery_planner与原始语法树到查询树的转换所采取的处理方式相似。

    1.8K20

    MySQL【第六章】——优化器及执行计划 - Explain

    2) Using where    mysql 将在存储引擎检索行后再进行过滤,许多where条件里涉及索引中的列,当(并且如果)它读取索引时,就能被存储引擎检验,因此不是所有带where子句的查询都会显示...当查询语句中有一些不确定的数据时,则不会被缓存。例如包含函数NOW()或者CURRENT_DATE()的查询不会缓存。...有一点需要注意,MySQL并不是会因为查询中包含一个不确定的函数而不检查查询缓存,因为检查查询缓存之前,MySQL不会解析查询语句,所以也无法知道语句中是否有不确定的函数。...优化器会根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会生成另外一个关系表达式,同时原有表达式也会保留,经过一系列转换后会生成多个执行计划,然后CBO会根据统计信息和代价模型...MySQL将结果集返回给客户端是一个增量、逐步返回的过程。在查询生成第一条结果时,MySQL就可以开始向客户端逐步返回结果集了。 上述为理论知识可能有点麻!

    1.3K20

    “面向对象就是一个错误!”

    result', computea(2) ); // output: // result 4 // result 4 // result 4 无需在意上述函数的具体功能,你只需要知道对于相同的输入,它总是会返回相同的输出...而 computeb 是不确定的,因为它调用了另一个不确定的函数Math.random()。我们怎么知道 Math.random()是不确定的?因为这个函数会根据系统时间(外部状态)来计算随机值。...无论这个函数被调用多少次,无论是否并行调用该函数,也无论函数外部是什么状况,它必然会输出 4。 不确定的程序则恰好相反,在大多数情况下,add(2, 2)将返回 4。...但有时,该函数可能会返回 3、5,甚至 1004。程序中万万不能出现不确定性,我希望你明白为什么。 不确定的代码有什么后果?它们会引发软件缺陷,也就是常说的 bug。...但我相信在不久的将来,终有一天面向对象编程会退出这个舞台,就像如今的 COBOL 一样。

    67940

    MySQL性能优化

    为什么有的情况下,减少连接数反而会提升吞吐量呢?为什么建议设置的连接池大 小要跟CPU的核数相关呢?每一个连接,服务端都需要创建一个线程去处理它。连接数越多,服务端创建的线程数就会越多。   ...问题:CPU是怎么同时执行远远超过它的核数大小的任务的?时间片。上下文切换。而CPU的核数是有限的,频繁的上下文切换会造成比较大的性能开销。...也就是说,对于主节点来说,写入 binlog,事务结束,就返回给客户端了。对于 slave 来说,接收到 binlog,就完事儿了,master 不关心 slave 的数据有没有写入成功。   ...master 不会等待很长的时间,但是 返回给客户端的时候,数据就即将写入成功了,因为它只剩最后一步了:就是读取 relay log,写入从库。    ...SUBQUERY 子查询中所有的内层查询都是 SUBQUERY 类型的。

    1.8K51

    SQL优化中新建索引真的比Explain好?面试官:你出去吧

    也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。...单表索引不能过多,业界有个不成文的规定,单表字段不超过20个,索引不超过5个,因为随着数据量的增加,过多的索引会占据很多物理空间。...SUBQUERY:当 select 或 where 列表中包含了子查询,该子查询被标记为:SUBQUERY 。...unique_subquery:只是用来完全替换子查询的索引查找函数效率更高了。 index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值。...简单点说,这个字段表示存储引擎返回的数据在经过过滤后,剩下满足条件的记录数量的比例。(MySQL.5.7后,默认explain直接显示partitions和filtered的信息)。

    62210

    SQL高级查询方法

    WHERE expression [NOT] IN (subquery) 通过未修改的比较运算符引入且必须返回单个值。...如果外部查询的 WHERE 子句包括列名称,它必须与子查询选择列表中的列是联接兼容的。 ntext、text 和 image 数据类型不能用在子查询的选择列表中。...将返回右表的所有行。如果右表的某一行在左表中没有匹配行,则将为左表返回空值。 FULL JOIN 或 FULL OUTER JOIN 完整外部联接将返回左表和右表中的所有行。...EXCEPT 运算符返回由 EXCEPT 运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值。...在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。 启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。

    7.1K20

    MySQL优化之Explain命令解读

    注意:id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行。...:用于where中的in形式子查询,子查询返回不重复值唯一值 I:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。...以上说的是索引扫描的两种情况,一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因为索引通常比数据表小,而且还能避免二次查询。...大概的意思就是说,如果你想要优化你的查询,那就要注意extra辅助信息中的using filesort和using temporary,这两项非常消耗性能,需要注意。...查询条件中分为限制条件和检查条件,5.6之前,存储引擎只能根据限制条件扫描数据并返回,然后server层根据检查条件进行过滤再返回真正符合查询的数据。

    99130

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

    EXPLAIN为SELECT语句中使用的每个表返回一行信息,它按照MySQL在处理语句时读取表的顺序列出输出中的表。...有子查询的语句id可能相同也可能不同 为什么有可能相同也有可能不同的,那是因为查询优化器觉得这条包含子查询的语句可以使用连接查询进行优化, 就会对这条语句进行重写为连接查询,所以想知道查询优化器是否重写了查询语句...SELECT * FROM `user` union SELECT * FROM user1; EXPLAIN 结果: 可以看到,user表和user1表之间用union 连接,结果却有三条记录,这是为什么呢...上面我们说过id也会为空,就是在使用union进行查询的时候。...本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能 会找到多个符合条件的行,所以它属于查找和扫描的混合体。 fulltext:使用了全文索引进行查询。

    96120
    领券