- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在sql server中运行两个类似的sql,其中表TBSFA_DAT_CUST有百万行并且没有约束(没有索引和主键),另外两个只有几行和普通主键:
s 较慢的:
SELECT A.CUST_ID, C.CUST_NAME, A.xxx --and several specific columns
FROM TBSFA_DAT_ORD_LIST A JOIN VWSFA_ORG_EMPLOYEE B ON A.EMP_ID = B.EMP_ID
LEFT JOIN TBSFA_DAT_CUST C ON A.CUST_ID = B.CUST_ID
JOIN VWSFA_ORG_EMPLOYEE D ON A.REVIEW_ID = D.EMP_ID
WHERE ISNULL(A.BATCH_ID, '') != ''
f 表示更快:
SELECT *
FROM TBSFA_DAT_ORD_LIST A JOIN VWSFA_ORG_EMPLOYEE B ON A.EMP_ID = B.EMP_ID
LEFT JOIN TBSFA_DAT_CUST C ON A.CUST_ID = B.CUST_ID
JOIN VWSFA_ORG_EMPLOYEE D ON A.REVIEW_ID = D.EMP_ID
WHERE ISNULL(A.BATCH_ID, '') != ''
f(0.6s以上)比s(4.6s以上)快得多。
另外,我找到了两种方法让 s 和 f 一样快:
1.在表TBSFA_DAT_CUST.CUST_ID中添加常量和主键;
2.特定表TBSFA_DAT_CUST超过61列(共80列)。
我的问题是,当我在 SELECT 子句中指定列而不是“*”时,为什么 sql 优化器会使用 Table Spool,以及为什么使用 Table Spool 执行速度较慢?
我的问题是关于 sql-server table-spool
最佳答案
在较慢的查询中,您将结果集限制为特定列。由于这是一个无索引、无约束的表,优化器将从原始表扫描中创建一个临时表,仅包含所需的特定列。然后它通过临时表上的嵌套循环运算符运行。当它知道需要表上的每一列时(Select *),它可以直接在表扫描之外运行嵌套循环运算符,因为扫描的结果集将完全连接到顶部表。
除此之外,您的查询还可能存在其他一些问题:
LEFT JOIN TBSFA_DAT_CUST C ON A.CUST_ID = B.CUST_ID
您在这里没有加入任何内容,而是将整个表加入到每条记录中。是指 a.cust_id = c.cust_id
或 b.cust_id = c.cust_id
或 a.cust_id = c.cust_id 和 b.cust_id = c.cust_id
?
此外,where 子句中的此函数毫无意义,并且会降低性能:
WHERE ISNULL(A.BATCH_ID, '') != ''
将其更改为:
WHERE A.BATCH_ID is not null and A.Batch_ID <> ''
关于sql-server - 为什么使用 Table Spool 比不使用慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550597/
如标题所示,我使用了 Media Foundation WavSink 示例,该示例将音频流解码为 PCM 并转储到文件。 我的应用程序是将此流定向到 FMOD 音频引擎,该引擎以实时速率使用 PCM
我正在 windows 服务器中编写一个 BAT 文件,它将连接到 oracle 并选择输出将被假脱机到一个文件,输出文件将被放置到网络驱动器。 我是通过以下步骤完成的: 1) 创建bat文件连接or
我正在尝试使用 SQLPLUS 中的 SPOOL 命令为数据库中的对象生成所有 DDL: SET trimspool ON SET wrap off SET heading off SET lines
我知道当您尝试将报告写入 Oracle SQLplus 中的文件时,您会使用假脱机命令。 MySQL 中的等效命令是什么? 这是我的代码: set termout off spool ${DB_ADM
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
每当新文件到达特定文件夹时,我都试图从远程机器获取文件到我的 hdfs。我在 flume 中遇到了 spool dir 的概念,如果 spool dir 在运行 flume agent 的同一台机器上
发现问题 最近在工作发现了一个错误,MySQL 报错 Exception Message:SQLSTATE[08004][1040]Too many connections,经查这次错误是硬盘空间
我想使用 Oracle 11g 中的假脱机功能。 我希望将整个输出假脱机到一个文件中,并将输出的子集假脱机到一个单独文件中。 在下面的示例中,我希望 temp_1.txt 包含来自 A、B、C、D 和
在sql server中运行两个类似的sql,其中表TBSFA_DAT_CUST有百万行并且没有约束(没有索引和主键),另外两个只有几行和普通主键: s 较慢的: SELECT A.CUST_ID,
我想异步发送电子邮件以获得更快、更轻的 http 响应,但我正在努力解决许多新概念。 例如,文档讨论 spool 。它说我应该将假脱机与文件一起使用,然后使用命令发送电子邮件。但我应该如何运行该命令?
如何使用 Java 解析 Linux 系统上生成的邮件文件?我的意思是,我希望能够提取文件内各种电子邮件的发件人、收件人、时间戳和主题。有什么建议吗? 最佳答案 javax.mail.internet
嗨, 我正在将 shell 脚本转换为 Java 程序。 shell 脚本运行一条 sql 语句并将文件假脱机到外部文本文件。我想用Java来模拟这个。 (输出文件的格式必须与在 SQL+ 中运行命令
请指教如何停止目录下的文件创建- /var/spool/clientmqeueue 之所以会这样,是因为clientmqeueue文件夹容量大,每天都在创建文件 请提供所有可能性的建议 最佳答案
我有一些遗留的 SQL (SP) declare @FactorCollectionId int; select @FactorCollectionId = colle
我有一系列要输出到 .csv 文件的查询。我必须查询数据库的唯一工具是 SQL Developer。 我可以运行每个查询,然后使用 SQL Developer 中的导出对话框将它们写入文件,但这很麻烦
我们将一个 150 mb 的 csv 文件复制到水槽的 spool 目录中,当它被加载到 hdfs 中时,该文件被拆分成更小的文件,例如 80 kb 的文件。有没有办法加载文件而不会使用水槽拆分成更小
我有一个查询,它创建多个临时表,然后将数据插入其中。据我了解,这是 Table Spool 的潜在原因。当我查看执行计划时,大部分处理都花在表假脱机上。有什么好的技术可以改善这些类型的性能问题吗?与临
我正在使用 SQLPLUS 将数据假脱机到文件中,但并非所有数据都被返回?我正在使用 dbms_metadata.get_ddl 函数,它仅将表定义的一部分返回到文件......我可以在查询输出中看到
首先我想说谢谢您查看这个问题:) 我是AS400/JAVA开发的初学者。我想知道如何使用 JT400 将假脱机文件列表获取到 java 以及如何将其从 OUTQ 转换为 PDF。 任何人都可以告诉我或
我正在使用 Java 打印服务 API 选择 PrintService,然后将其传递给 JasperReport 的 JRPrintServiceExporter。基本思想是将文档发送到提供的 Pri
我是一名优秀的程序员,十分优秀!