MySQL8.0新特性中什么是CTE语法支持
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章将为大家详细讲解有关MySQL8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CTE(common table
千家信息网最后更新 2025年01月21日MySQL8.0新特性中什么是CTE语法支持
这篇文章将为大家详细讲解有关MySQL8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
CTE(common table expression),针对同一个FROM子查询在SQL中出现多次的情况,在创建计划的时候,只对其中一个子查询创建计划,并将结果放到临时表中,其它的子查询直接使用临时表。比如Oracle中经常使用的with as /*+materialize*/ 用法。
首先,我们看一下简单非递归的CTE的工作过程
CREATE TABLE t(a int);INSERT INTO t VALUES(1),(2);mysql>WITH abc as(SELECT * FROM t)SELECT * FROM abc;+-------------+| a |+-------------+| 1 || 2 |+-------------+返回行数:[2],耗时:9 ms.--为了清楚的看到OPTIMIZER的优化过程,我们先暂且关闭derived_merge特性。mysql>SET OPTIMIZER_SWITCH='derived_merge=off';执行成功,耗时:9 ms.mysql>explain WITH abc as (SELECT * FROM t) SELECT * FROM abc;+----+-------------+------------+------------+------+---------------+-----+---------+-----+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+------------+------------+------+---------------+-----+---------+-----+------+----------+-------+| 1 | PRIMARY || | ALL | | | | | 2 | 100 | || 2 | DERIVED | t | | ALL | | | | | 2 | 100 | |+----+-------------+------------+------------+------+---------------+-----+---------+-----+------+----------+-------+返回行数:[2],耗时:9 ms.
mysql>SET OPTIMIZER_SWITCH='derived_merge=on';执行成功,耗时:9 ms.mysql>explain WITH abc as (SELECT * FROM t) SELECT * FROM abc;+----+-------------+-------+------------+------+---------------+-----+---------+-----+------+------------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+-----+---------+-----+------+------------+-------+| 1 | SIMPLE | t | | ALL | | | | | 2 | 100 | |+----+-------------+-------+------------+------+---------------+-----+---------+-----+------+------------+-------+返回行数:[1],耗时:9 ms.
啊
mysql>EXPLAIN format = json WITH cte(x) as (SELECT * FROM t) SELECT * FROM (SELECT * FROM cte) AS t1, (SELECT * FROM cte) AS t2;-----------------------------------------| { "query_block": { "select_id": 1, "cost_info": { "query_cost": "5.65" }, "nested_loop": [ { "table": { "table_name": "t1", "access_type": "ALL", "rows_examined_per_scan": 2, "rows_produced_per_join": 2, "filtered": "100.00", "cost_info": { "read_cost": "2.52", "eval_cost": "0.20", "prefix_cost": "2.73", "data_read_per_join": "32" }, "used_columns": [ "x" ], "materialized_from_subquery": { "using_temporary_table": true, "dependent": false, "cacheable": true, "query_block": { "select_id": 2, "cost_info": { "query_cost": "2.72" }, "table": { "table_name": "cte", "access_type": "ALL", "rows_examined_per_scan": 2, "rows_produced_per_join": 2, "filtered": "100.00", "cost_info": { "read_cost": "2.52", "eval_cost": "0.20", "prefix_cost": "2.73", "data_read_per_join": "32" }, "used_columns": [ "x" ], "materialized_from_subquery": { "using_temporary_table": true, "dependent": false, "cacheable": true, "query_block": { "select_id": 3, "cost_info": { "query_cost": "0.45" }, "table": { "table_name": "t", "access_type": "ALL", "rows_examined_per_scan": 2, "rows_produced_per_join": 2, "filtered": "100.00", "cost_info": { "read_cost": "0.25", "eval_cost": "0.20", "prefix_cost": "0.45", "data_read_per_join": "32" }, "used_columns": [ "a" ] } } } } } } } }, { "table": { "table_name": "t2", "access_type": "ALL", "rows_examined_per_scan": 2, "rows_produced_per_join": 4, "filtered": "100.00", "using_join_buffer": "Block Nested Loop", "cost_info": { "read_cost": "2.53", "eval_cost": "0.40", "prefix_cost": "5.65", "data_read_per_join": "64" }, "used_columns": [ "x" ], "materialized_from_subquery": { "using_temporary_table": true, "dependent": false, "cacheable": true, "query_block": { "select_id": 4, "cost_info": { "query_cost": "2.72" }, "table": { "table_name": "cte", "access_type": "ALL", "rows_examined_per_scan": 2, "rows_produced_per_join": 2, "filtered": "100.00", "cost_info": { "read_cost": "2.52", "eval_cost": "0.20", "prefix_cost": "2.73", "data_read_per_join": "32" }, "used_columns": [ "x" ], "materialized_from_subquery": { "sharing_temporary_table_with": { "select_id": 3 } } } } } } } ] }} |
关于MySQL8.0新特性中什么是CTE语法支持就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
特性
查询
语法
支持
成功
内容
文章
更多
知识
篇文章
过程
不错
清楚
个子
情况
时候
结果
质量
并将
递归
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
国家信息网络安全监察部门
加强网络安全的英文
服务器怎么展示手中物品
兰州工控网络安全
卫生网络安全
长春爱蚂蚁软件开发中心
天地劫龙绝捍卫服务器几时开的
网络技术服务外包合同模板
网络安全知识大赛证书
数据库group怎么用
我的世界网易版惊变100天服务器号
分布式数据库的两种数据
企业软件开发app
视频存储数据库mysql
常见网络安全问题小视频
网络安全机制主要内容
四川和旭互联网科技公司
社区组织网络安全宣传周
智能家居与服务器的区别
互联网百度科技直播
靠谱的软件开发企业
海南邵赢网络技术官网
网络安全公司的关键业务
服务器方块世界
电脑服务器进不去系统
umeet会议的服务器地址
衡水软件开发商家
检查数据库是否启动在哪
衢州软件开发设计
中专软件开发专业怎么样