为什么 CREATE TABLE AS SELECT 比 INSERT with SELECT 更快

2023-11-26

我使用 INNER JOIN 进行查询,结果是 1200 万行。 我喜欢把它放在桌子上。 我做了一些测试,当我使用子句 AS SELECT 创建表时,比先创建表然后使用 SELECT 运行 INSERT 更快。 我不明白为什么。 有人可以帮我解释一下吗? 塔克斯


如果您使用“创建表作为选择”(CTAS)

CREATE TABLE new_table AS 
    SELECT * 
    FROM old_table

你会自动做一个直接路径插入的数据。如果你做一个

INSERT INTO new_table AS 
    SELECT * 
    FROM old_table

你做了一个传统刀片。如果您想进行直接路径插入,则必须使用 APPEND 提示。所以你必须做

INSERT /*+ APPEND */ INTO new_table AS 
    SELECT * 
    FROM old_table

获得与“CREATE TABLE AS SELECT”类似的性能。

普通的传统刀片是如何工作的?

Oracle 检查空闲列表表段中已使用且仍有可用空间的块。如果该块不在缓冲区高速缓存中,则会将其读入缓冲区高速缓存。最终这个块被读回磁盘。 在此过程中,写入块的撤消(这里只需要少量数据),更新数据结构,例如如有必要,段头中的空闲列表和所有这些更改也会写入重做缓冲区。

直接路径插入如何工作?

该进程在上面分配空间高水位线表的空间,即超出已使用的空间。它将数据直接写入磁盘,不使用缓冲区高速缓存。并且它也被写入重做缓冲区。提交会话后,高水位线将超出新写入的数据,并且该数据现在对其他会话可见。

如何改进 CTAS 和直接路径插入?

  • 您可以在 NOLOGGING 模式下创建故事,这样就不会写入重做信息。如果这样做,您应该在插入后对包含该表的表空间进行备份,否则如果您需要这样做,您将无法恢复该表。
  • 您可以并行进行选择

  • 您可以并行进行插入

  • 如果您必须在插入操作期间维护索引和约束甚至触发器,这可能会大大减慢插入操作的速度。因此,您应该避免这种情况,并在插入后创建索引,并可能使用 Novalidata 创建约束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 CREATE TABLE AS SELECT 比 INSERT with SELECT 更快 的相关文章

  • SQL Like 带有子查询

    我怎样才能做到这一点 SELECT FROM item WHERE item name LIKE SELECT equipment type FROM equipment type GROUP BY equipment type 内部子查询
  • 过滤项目来源

    通过此代码 我设置了数据网格的 ItemsSource 不过 我有更多的 wpf 控件来过滤数据网格 例如从时间范围过滤数据网格 我可以为此编写一个新查询 但这似乎没有必要 因为数据已经可用 我只需要过滤它 最好的方法是什么 我能得到的任何
  • Sql批量复制截断小数

    当我使用批量复制将十进制值从 C DataTable 插入 Sql Server 2005 时 值会被截断而不是四舍五入 DataTable 中的数据类型为 Decimal 数据库中的数据类型为Decimal 19 3 数据表中的值为 1
  • 常量值如何影响连接的 ON 子句?

    我最近发现 LEFT JOIN 的 ON 子句可能包含 1 1 等值 这让我感到不安 因为它打破了我对连接功能的看法 我遇到过以下情况的更详细版本 SELECT DISTINCT Person ID FROM Person LEFT JOI
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • 如何将 SQL 结果存入 STRING 变量?

    我正在尝试获取 C 字符串变量或字符串数 组中的 SQL 结果 是否可以 我需要以某种方式使用 SqlDataReader 吗 我对 C 函数和所有功能非常陌生 曾经在 PHP 中工作 所以如果可以的话请给出一个工作示例 如果相关 我已经可
  • MySQL如何根据字段是否存在来插入新记录或更新字段?

    我正在尝试实现一个评级系统 在数据库表中保留以下两个字段 评级 当前评级 num rates 迄今为止提交的评分数量 UPDATE mytable SET rating rating num rates theRating num rate
  • Oracle SQL——从字符串中删除部分重复项

    我有一个表 其中有一列包含字符串 如下所示 static text here 1abcdefg1abcdefgpxq 从这个字符串1abcdefg重复两次 所以我想删除该部分字符串 然后返回 static text here 1abcdef
  • 标记个体内事件发生后发生的日期

    我有一组长格式的数据 每人几行 人 id 其中事件 事件 1 应该只发生一次 事件发生后 该人不应再有任何数据 如果事件发生后出现任何记录 我想使用名为 flag flag 1 的新变量创建一个查询 例如 下面标记了 id 5 因为在该人的
  • SQL 用新值替换旧值

    我有一个名为tbl Products 其中有一列名为articlenumber并且充满了像这样的数字s401 s402 etc 我生成了一个包含新商品编号的列表 它将替换旧的商品编号 s401 I00010 s402 I00020 s403
  • 仅从数据库获取我想要的数据但保留结构

    我正在尝试在 powerbi 上执行此操作 但我想这只是基本的 SQL 我想将我的数据导入到 powerBi 中 但使用一些 id 对其进行过滤 我们以这个例子为例 我与一些公司有数据库 表1 每个公司都有建筑物 表2 每个建筑物有员工 表
  • 从多个表中选择 - 一对多关系

    我有这样的表 表产品 身份证 姓名 表格图像 产品 ID 网址 订单号 表价 产品 ID 组合 货币 价格 表数量 产品 ID 组合 数量 表 Product 与其他表是一对多关系 我需要查询表并得到类似这样的结果 伪数组 ProductI
  • MySql如何通过过滤多列来限制多个数字?

    我想从数据库中获取 4 个不同类别的 50 个问题 我想要 4 个不同类别中每个类别的不同数量的问题 我的结果集必须包含第一类 12 个问题 第二类 20 个问题 第三类 10 个问题和第四类 8 个问题 我的问题表中总共有 50 个问题
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • ROWID 整数主键自动增量 - 如何插入值?

    我用 Java 创建了一个 SQLite 表 create table participants ROWID INTEGER PRIMARY KEY AUTOINCREMENT col1 col2 我尝试添加行 insert into pa
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐

  • SQLAlchemy 不会更新我的数据库

    我正在使用 SQLAlchemy 0 7 8 制作金字塔应用程序 我使用的是64位Python3 2 问题是 为什么以下函数不向数据库提交任何内容 def create card sText sCard create a wildcard
  • Objectify 和 TimerTask:没有为此线程注册 API 环境

    我想得到一个TimerTask设置为定期从 Google App Engine 数据存储中删除条目 我是否设置了一个ServletContextListener with a Timer 在 的里面contextInitialized 我已
  • 涉及 Enum 的多重继承元类冲突

    我需要一个枚举类的双重继承 但也支持我自己的方法 这是上下文 import abc from enum import Enum class MyFirstClass abc ABC abc abstractmethod def func s
  • 如何在 DENO 中使用 npm 模块?

    德诺超级酷 我早上看到了 现在想迁移到 deno 我试图将现有的 Nodejs 脚本移至 deno 任何人都可以帮助我如何在 deno 中使用 npm 模块 我需要 esprima 模块 这个有包https github com denol
  • 通过 jquery.couch.js 或其他方式在 Couchapp/CouchDB 中进行用户注册

    背景 现在 我正在尝试使用 couchDB couchapp 构建一个应用程序 该应用程序将存储来自用户的持久且重要的信息 并且停留在用户使用 couchapp 注册所需的步骤上 本质上 我想做的是有一个简单的注册表单 用户可以使用它来注册
  • 如何与 PHP 设置 WebSocket 安全连接?

    我找不到任何有关在 PHP 中设置 wss 连接的信息 我连接抛出ws没有问题 顺便说一句 我正在使用这个非常棒的库来做到这一点 https github com albeva php websocket 但我的网站使用 https 我需要
  • 设置RadioButton的value属性

    我需要根据从数据库返回的数据构建一个单选按钮列表 每个按钮都需要有一个与之关联的值 我可以根据所选按钮获取该值 理想情况下我只会使用RadioButtonList控件 但是 我需要一个非常自定义的布局RadioButtonList似乎无法处
  • 使用 Avaudioengine iOS 的低通滤波器 + 采样率转换

    我们正在开发一个项目 该项目允许我们使用一些低通滤波器和高通滤波器以 5k Hz 采样率从麦克风录制一些声音 我们正在使用什么 我们正在使用音频引擎以此目的 我们正在使用AVA音频转换器用于降低采样率 我们正在使用AVAudioUnitEQ
  • JavaScript 对象的动态深度选择

    对于单个属性 这相当简单 var jsonobj test ok var propname test Will alert ok alert jsonobj propname 但我想做的是使用嵌套属性 var jsonobj test te
  • sqlite3-ruby 无法在 rvm 1.8.7 上运行

    从 RVM 1 8 7 开始升级到 Rails 3 操作系统 10 5 8 Output josh crewss macbook joshcrews gem install sqlite3 rubyBuilding native exten
  • scrapy 蜘蛛中的多重继承

    是否可以创建一个继承两个基本蜘蛛 即 SitemapSpider 和 CrawlSpider 功能的蜘蛛 我一直在尝试从各个网站抓取数据 并意识到并非所有网站都列出了网站上的每个页面 因此需要使用 CrawlSpider 但 CrawlSp
  • 为什么浏览器不支持gRPC?

    gRPC 基于 HTTP 2 假设 得到浏览器的广泛支持 因此 我觉得从浏览器使用gRPC应该没有问题 然而 很明显有一个问题 协议 grpc web 是不同的 因为 由于浏览器限制 而存在 还有大量博客文章描述了为让 gRPC 在浏览器中
  • 为什么在分配给变量(别名条件)时,类属性的类型缩小检查不起作用?

    如何缩小别名条件表达式中类的属性类型 Short 在类方法中 我想进行类型缩小检查 例如this end null this head null 但我想首先将此检查的结果分配给一个变量 然后再在类型缩小中使用它if条款 它没有按预期工作 不
  • 您可以将 WebApi 2 基于属性的路由与 WebForms 一起使用吗?

    正如标题所述 我想知道是否可以将 WebAPI 2 的基于属性的路由与 WebForms 一起使用 我觉得这显然可以完成 因为您可以在 WebForms 应用程序中很好地使用 WebAPI2 我只是不知道如何启用基于属性的路由 基于此art
  • PowerShell:将 16MB CSV 导入 PowerShell 变量会创建 >600MB 的 PowerShell 内存使用量

    我试图理解为什么当我导入一个大约 16MB 的文件作为变量时 PowerShell 的内存膨胀如此之大 我可以理解该变量周围有额外的内存结构 但我只是想理解为什么它那么高 这就是我在下面所做的 只是任何人都可以运行的另一个脚本的精简简单片段
  • Golang的append()什么时候创建一个新的切片?

    根据内置 API 文档 append 会在原切片容量不够大时重新分配并复制到新的数组块中 这是一个用于创建字母表 在本例中为布尔值 组合的递归算法 简化版本 字母表的成员 true false 被递归地添加到切片中 直到达到正确的长度 此时
  • google.maps.event.addDomListener(window, 'load',initialize); 的功能是什么?

    我正在尝试谷歌地图 我找到了这个说法 google maps event addDomListener window load initialize 该语句的作用是什么 它添加了一个监听器window对象 一旦load事件被触发 即 页面已
  • 从 NSURLResponse 完成块中获取数据

    看来我还没有完全理解块的概念 在我的代码中 我必须从asychronous block从 返回outer 方法 我用谷歌搜索发现如果定义一个variable with block v i s i b i l i t y mutability
  • 如何使用 ElementTree 获取元素的完整 XML 或 HTML 内容?

    也就是说 所有文本和子标签 没有元素本身的标签 Having p blah b bleh b blih p I want blah b bleh b blih element text 返回 blah etree tostring elem
  • 为什么 CREATE TABLE AS SELECT 比 INSERT with SELECT 更快

    我使用 INNER JOIN 进行查询 结果是 1200 万行 我喜欢把它放在桌子上 我做了一些测试 当我使用子句 AS SELECT 创建表时 比先创建表然后使用 SELECT 运行 INSERT 更快 我不明白为什么 有人可以帮我解释一