高性能的MySQL(6)查询执行机制(二)

这里继续上一篇中的优化器部分:

MySQL如何执行关联查询

MySQL对任何关联都执行嵌套循环关联操作,即先在一个表中循环取出单条数据,然后再嵌套循环到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为止。然后根据各个表匹配的行,返回查询中需要的各个列。MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个关联表无法找到更多的行以后,MySQL返回到上一层次关联表,看是否能够找到更多的匹配记录,依次类推迭代执行。

例如:

select tab1.col1,tab2.col2

from tab1 inner join tab2 using(col3)

where tab1.col1 in (5,6);

执行计划

MySQL执行查询的方式总是从一个表开始一直嵌套循环,回溯完成的所有表的关联。所以MySQL执行计划总是一颗左侧深度优先的树。

时间: 2024-10-04 17:54:24

高性能的MySQL(6)查询执行机制(二)的相关文章

高性能的MySQL(6)查询执行机制(一)

希望优化查询性能的时候,最好的办法是弄清楚MySQL是如何优化和执行查询的.了解了内部机制,才能更好的实施设计. 当MySQL执行一个查询时,到底做了什么,先看一副图吧: 1.客户端发送一条查询给服务器. 2.服务器先检查查询缓存,如果命中了缓存,则立刻返回缓存中的结果,否则进入下一步. 3.服务器端进行SQL解析.预处理.再由优化器生成对应的执行计划. 4.MySQL根据优化器生成的执行执行计划,调用存储引擎的API来进行查询. 5.将结果返回给客户端 上面的每一步都很复杂,特别是查询优化器这

MySQL的查询缓存机制基本学习教程_Mysql

MySQL缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql.如果表更改 了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空.更改指的是表中任何数据或是结构的改变,包括INSERT.UPDATE. DELETE.TRUNCATE.ALTER TABLE.DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表的使用MERGE表的查询.显然,这对于频繁更新的表,查询缓存是不适合的,而

mysql慢查询的分析方法

本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询.想起来有几个十分设置的方法,有几个参数的名称死活回忆不起来了,于是重新整理一下,自己做个笔记. 对于排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MySQL慢查询以及没有得用索引的查询. OK,开始找出MySQL中执行起来不"爽"的SQL语句吧. MySQL慢查询分析方法一: 这个方法我正在用,呵呵,比较喜欢这种即时性的. MySQL5.0以上的版本可以

高性能的MySQL(2)慢查询

一.剖析MySQL查询 1.首先从慢查询开始,慢查询是开销最低,精度最高的测量查询时间的工具. a.开始mysql的慢查询,修改my.conf [mysqld] #开启慢查询 log_slow_queries = ON #指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log log-slow-queries = /usr/local/mysq/var/slowquery.log #记录超过的时间,默认为10s long_query_time = 1 #log

sql性能优化-mysql子查询是否被重复执行?

问题描述 mysql子查询是否被重复执行? 请教!mysql返回固定结果集时,是否被重复执行 例如1:select t.*,(select count(1) from table01) from table01 t; 例如2:select t.*,(select count(1) from table01 t2 where t2.key=t1.key) from table01 t1 ;--像这种嵌套的子查询是会被重复执行的. 疑问:上面例子1中的子查询遍历过程中,都是固定结果集,会被重复执行N

《MySQL DBA修炼之道》——1.3 查询执行过程概述

1.3 查询执行过程概述 图1-2抽象化地描述了客户端和数据库交互的过程. 图1-2 客户端与数据库交互抽象架构图 如图1-2所示,客户端(Clients)发布查询的流程如下,首先连接MySQL(Connection Handling),然后发布查询,如果缓存(Query Cache)中有结果集,则直接返回结果集.如果结果没有被缓存,那么,MySQL解析查询(Parser)将通过优化器(Optimizer)生成执行计划,然后运行执行计划通过API(Pluggable Storage Engine

基于UNION ALL的分页查询执行计划问题(二)

今天又发现9204上的一个问题.不过这个问题并不会造成数据的错误,但是会严重的影响查询的性能. 基于UNION ALL的分页查询执行计划问题:http://yangtingkun.itpub.net/post/468/303221 这篇文章继续讨论这个问题,并给出一个相对简单的解决方法. 首先发现的第一个问题是,这个问题是由UNION ALL引起的,而和视图没有关系. SQL> SELECT * 2 FROM 3 ( 4 SELECT ROWNUM RN, A.* 5 FROM 6 ( 7 SE

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

PHP到MySQL数据查询过程概述

HP层到MySQL层 Php到sql组件层次如下图所示: ext/mysqli和ext/mysql 是客户端的扩展程序库(库函数) ,在客户端脚本层面的扩展库. Mysqli库是mysql库的扩展版本,扩展版本增加了列版定(Bind Column)绑定.PDO (PHP Data Object) 是另外一种面向数据对象的 扩展库.这些扩展库直接面向编程者,而它的底层实现是mysql连接引擎(如mysqlnd和libmysql )(参考 http://bbs.chinaunix.net/threa