iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL8.0新特性中什么是CTE语法支持
  • 147
分享到

MySQL8.0新特性中什么是CTE语法支持

2024-04-02 19:04:59 147人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关Mysql8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CTE(common table ex

这篇文章将为大家详细讲解有关Mysql8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

CTE(common table expression),针对同一个FROM子查询在sql中出现多次的情况,在创建计划的时候,只对其中一个子查询创建计划,并将结果放到临时表中,其它的子查询直接使用临时表。比如oracle中经常使用的with as   用法。

首先,我们看一下简单非递归的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     | <derived2> |            | 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语法支持就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL8.0新特性中什么是CTE语法支持

本文链接: https://www.lsjlt.com/news/61464.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL8.0新特性中什么是CTE语法支持
    这篇文章将为大家详细讲解有关MySQL8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CTE(common table ex...
    99+
    2022-10-18
  • MySQL8.0新特性——支持原子DDL语句
       MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即...
    99+
    2022-10-18
  • MySQL8.0新特性是什么
    本篇内容主要讲解“MySQL8.0新特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL8.0新特性是什么”吧!1. 默认字符集由latin1变为...
    99+
    2022-10-19
  • MySQL8.0新特性之支持原子DDL语句的示例分析
    小编给大家分享一下MySQL8.0新特性之支持原子DDL语句的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL ...
    99+
    2022-10-18
  • MySQL8.0的新特性是什么
    本篇文章给大家分享的是有关MySQL8.0的新特性是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。大量使用 class 重构代码明面上: ...
    99+
    2022-10-18
  • MySQL8.0优化器新特性是什么
    这篇文章主要介绍“MySQL8.0优化器新特性是什么”,在日常操作中,相信很多人在MySQL8.0优化器新特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL8...
    99+
    2022-10-18
  • JDK7新特性的语法是什么
    JDK7新特性的语法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JDK7对Java语法有少量更新,重点是在易用性和便捷性的改进。1.二进制字面量JDK7...
    99+
    2023-06-17
  • kubernetes1.5新特性中是否支持Photon卷插件
    这篇文章将为大家详细讲解有关kubernetes1.5新特性中是否支持Photon卷插件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Kubernetes中卷的作用在于提供给POD持久化存...
    99+
    2023-06-05
  • java8新特性lambda表达式的语法是什么
    这篇“java8新特性lambda表达式的语法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java8新特性lambd...
    99+
    2023-07-05
  • css3中的新特性是什么
    这篇文章给大家分享的是有关css3中的新特性是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。css的基本语法是什么css的基本语法是:1、css规则由选择器和一条或多条声明两个部分构成;2、选择器通常是需要改...
    99+
    2023-06-14
  • php-5.6中的新特性是什么
    今天小编给大家分享一下php-5.6中的新特性是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php-5.6是指已发布的...
    99+
    2023-06-26
  • mybatisplus支持null字段全量更新的方法是什么
    本篇内容介绍了“mybatisplus支持null字段全量更新的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景如果仅仅只是标题...
    99+
    2023-07-05
  • Python中不支持 switch 语句的原因是什么
    这期内容当中小编将会给大家带来有关Python中不支持 switch 语句的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、switch 是什么switch 的语法格式如下:switch(ex...
    99+
    2023-06-16
  • js中switch语句的特性是什么
    这篇文章主要介绍“js中switch语句的特性是什么”,在日常操作中,相信很多人在js中switch语句的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中switch语句的特性是什么”的疑惑有所...
    99+
    2023-06-20
  • margin-top属性的语法和特征是什么
    本篇文章为大家展示了margin-top属性的语法和特征是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。你对margin-top 属性的语法和特征是否了解,这里...
    99+
    2022-10-19
  • HTMl5中28个新特性分别是什么
    这篇文章主要介绍HTMl5中28个新特性分别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览...
    99+
    2022-10-19
  • PHP7.x中各个版本的新特性是什么
    小编给大家分享一下PHP7.x中各个版本的新特性是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP 7.x 各个版本的新特性前言上个月同事看见我写$a = $a  '...
    99+
    2023-06-14
  • Java 中的 xx ≠ null 是什么新语法
    奇怪的不等于(≠) 最近,栈长用 IntelliJ IDEA 看源码时发现: 咦~这是什么鬼? Java 不等于的写法不是一直都是 != 么?什么时候可以写 ≠ 了?? 不科学啊~...
    99+
    2022-11-12
  • PHP7.x中每一个版本的新特性是什么
    这篇文章主要为大家展示了“PHP7.x中每一个版本的新特性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP7.x中每一个版本的新特性是什么”这篇文章吧。PHP 7.0标量类型声明什么是...
    99+
    2023-06-15
  • php中sql更新语句用法是什么
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php中sql更新语句用法是什么?UPDATE 语句用于更新数据库表中已存在的记录。语法UPDATE table_name SET column1=value, co...
    99+
    2022-10-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作