mysql5.6.16下跟踪SQL查询转换的结果

当SQL执行时,会做一些查询转换,你看到的SQL很可能被转换为其他的形式的SQL执行(有视图重写,查询转换,谓词推进等)。在Oracle下,可以通过10053跟踪SQL语句。在mysql下,可以通过设置optimizer_trace来实现。

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.6.16    |

+-----------+

1 row in set (0.00 sec)

mysql> create view v_test5 as select * from test1 order by index_length;

mysql> set session optimizer_trace=‘enabled=on‘;

mysql> select count(1) from v_test5 where index_length>1024 ;

mysql> select * from information_schema.optimizer_trace;

QUERY   TRACE   MISSING_BYTES_BEYOND_MAX_MEM_SIZ

<MEMO1>  <MEMO2>

<MEMO1>:select count(1) from v_test5 where index_length>1024

<MEMO2>:

{

"steps": [

{

"view": {

"database": "test",

"view": "v_test5",

"in_select#": 1,

"select#": 2,

"merged": true

}

},

{

"join_preparation": {

"select#": 1,

"steps": [

{

"expanded_query": "/* select#1 */ select count(1) AS `count(1)` from (`test1`) where (`test1`.`INDEX_LENGTH` > 1024) order by `test1`.`INDEX_LENGTH`"

}

]

}

},

{

"join_optimization": {

"select#": 1,

"steps": [

{

"transformations_to_nested_joins": {

"transformations": [

"parenthesis_removal"

],

              "expanded_query": "/* select#1 */ select count(1) AS `count(1)` from `test1` where (`test1`.`INDEX_LENGTH` > 1024) order by `test1`.`INDEX_LENGTH`"

}

},

{

"condition_processing": {

"condition": "WHERE",

"original_condition": "(`test1`.`INDEX_LENGTH` > 1024)",

"steps": [

{

"transformation": "equality_propagation",

"resulting_condition": "(`test1`.`INDEX_LENGTH` > 1024)"

},

{

"transformation": "constant_propagation",

"resulting_condition": "(`test1`.`INDEX_LENGTH` > 1024)"

},

{

"transformation": "trivial_condition_removal",

"resulting_condition": "(`test1`.`INDEX_LENGTH` > 1024)"

}

]

}

},

{

"table_dependencies": [

{

"table": "`test1`",

"row_may_be_null": false,

"map_bit": 0,

"depends_on_map_bits": [

]

}

]

},

{

"ref_optimizer_key_uses": [

]

},

{

"rows_estimation": [

{

"table": "`test1`",

"table_scan": {

"rows": 166,

"cost": 4

}

}

]

},

{

"considered_execution_plans": [

{

"plan_prefix": [

],

"table": "`test1`",

"best_access_path": {

"considered_access_paths": [

{

"access_type": "scan",

"rows": 166,

"cost": 37.2,

"chosen": true

}

]

},

"cost_for_plan": 37.2,

"rows_for_plan": 166,

"chosen": true

}

]

},

{

"attaching_conditions_to_tables": {

"original_condition": "(`test1`.`INDEX_LENGTH` > 1024)",

"attached_conditions_computation": [

],

"attached_conditions_summary": [

{

"table": "`test1`",

"attached": "(`test1`.`INDEX_LENGTH` > 1024)"

}

]

}

},

{

"refine_plan": [

{

"table": "`test1`",

"access_type": "table_scan"

}

]

}

]

}

},

{

"join_execution": {

"select#": 1,

"steps": [

]

}

}

]

}

mysql5.6.16下跟踪SQL查询转换的结果

时间: 2024-10-06 11:33:43

mysql5.6.16下跟踪SQL查询转换的结果的相关文章

WordPress 常用数据库SQL查询语句大全

在使用WordPress的过程中,我们少不了要对数据库进行修改操作,比如,更换域名.修改附件目录.批量修改文章内容等等.这个时候,使用SQL查询语句可以大大简化我们的工作量. 关于如何操作SQL查询语句,请移步<phpMyAdmin教程 之 使用SQL查询语句修改数据库信息> 下面分享一些wordpress常用的SQL查询语句 注:1.在每次使用SQL查询语句前,请务必导出数据库备份!! 2.下面的SQL查询语句,数据库都是使用WordPress默认的 wp_ 表头,请根据自己的实际修改. 1

centos下编译安装MySQL5.7.16

一.简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一. MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. MySQL所使用的 SQL 语言是用

windows下配置mysql5.7.16

准备工作:解压mysql5.7.16到D盘根目录, 然后将my.ini文件放到bin目录下 初始化数据库.配置相关信息: 1.以管理员身份运行windows 命令行(特别提醒:WIN7及WIN7以上版本系统这里一定要用管理员身份,不然后续操作会出错) 2. 进入mysql的解压缩目录 D:\mysql-5.7.15-winx64\bin(提醒:此处需要进入bin目录,否则后续操作会出现错误) 3.注册Mysql服务.运行命令:mysqld --install MySQL如果出现:"Service

CetOS6.5下编译安装Mysql5.6.16

首先检查是否安装了mysql rpm -qa | grep -i mysql#如果安装了先卸载旧的版本yum remove -y mysql mysql-server mysql-libs mysql-devel(具体根据列出的列表将mysql相关的项都卸载了) 删除所有mysql相关的残留文件,可用find / -name mysql查找所有与mysql相关的目录 rm -rf /var/lib64/mysql rm -rf /etc/my.cnf rm -rf /var/lib/mysql(

hibernate sql查询后对象转换成实体类

在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用 session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);     session. session.createSQLQuery(sql).addEntity(entity.class); /**     * 分页查询sql,sql语句不包含起始记录数和查询记录数     * @pa

win7-64bit下安装mysql-5.7.16

### 好久没有在windows下载安装mysql了,今天正好使用,简单记录了一下安装过程留着看. (1)下载:mysql-5.7.16-winx64.zip (2)解压到:D:\ProgramFiles\mysql-5.7.16 (3)配置环境变量Path里:D:\ProgramFiles\mysql-5.7.16\bin (4)简单配置:D:\ProgramFiles\mysql-5.7.16\my.ini  # 添加如下内容: [client] default-character-set=

SQL查询速度慢的原因

1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1)把数据.日志.索引放到不同的

SQL行列转换6种方法

在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解法以及Oracle支持解法. 一.测试数据 测试表依旧采用Oracle经典的scott模式下的dept表和emp表,结构如下: DEPT: create table DEPT ( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(

oracle查询转换_inlist转换

oracle的optimizer会对一些sql语句进行查询转换,比如: 合并视图 子查询非嵌套化 inlist转换 下面讲讲遇到的in list转化优化的案例: create table test( col1 varchar2(12) col2 number ext varchar2(4000) ); create index test_ind on test(user_id, col2); create sequence seq_test cache 200; 第一步:准备一些测试数据(10个