- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试设置一个游标来遍历同一巨大表(超过 1.5 亿条记录)的两个“实例”之间的连接生成的记录。
出现如下异常信息:
Could not allocate space for object 'dbo.SORT temporary run storage: 165282123350016' in database 'tempdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
你们知道这是什么原因吗?或者如何让下面的查询更高效?
我发现它发生在 DECLARE CURSOR
和第一个 FETCH NEXT
之间的某处,但我还不知道它是否介于...
DECLARE CURSOR
和OPEN
或之间
OPEN
和第一个 FETCH NEXT
。更多细节:sql语句如下:
DECLARE cData CURSOR LOCAL FORWARD_ONLY READ_ONLYFOR SELECT ... FROM HugeTable HT1 JOIN HugeTable HT2 ON .. JOIN Table3 ON .. JOIN Table4 ON .. JOIN Table5 ON .. WHERE ... ORDER BY HT1..., HT1...INSERT INTO SysLog (Description) VALUES ('A')OPEN cDataBEGIN TRANSACTION ProcessData -- Currently trying new logging here: -- INSERT INTO SysLog (Description) VALUES ('B') FETCH NEXT FROM cData INTO ... INSERT INTO SysLog (Description) VALUES ('C') ... etc.
我收到的最后一条日志消息是“A”,然后一小时后它失败并显示上述消息,从未到达“C”。我现在正在尝试在“B”点进行日志记录。
根据要求,我发布了准确的 sql 表达式:
DECLARE cSource CURSOR LOCAL FORWARD_ONLY READ_ONLYFOR SELECT MD.sFieldName, MD.sFieldValue, TR.sTargetDataType, MD2.sFieldValue AS sUniqueID, TR.sTargetTableName, TR.sTargetFieldName, I.iRefCustomerID, I.iInterfaceID, IL.iRefInterfaceSessionID FROM MasterData MD JOIN MasterData MD2 ON MD.iRowIndex = MD2.iRowIndex AND MD.iBatchNumber = MD2.iBatchNumber AND MD.sTableName = MD2.sTableName AND MD2.sFieldName = 'sUniqueID' JOIN SourceTargetRelation TR ON MD.sFieldName = TR.sSourceFieldName AND MD.sTableName = TR.sSourceTableName JOIN InterfaceLog IL ON IL.iInterfaceLogID = MD.iBatchNumber JOIN Interface I ON I.iInterfaceID = IL.iRefInterfaceID AND TR.iRefSystemID = I.iRefSystemID WHERE MD.iBatchNumber = @iBatchNumber ORDER BY MD.sTableName, MD.iRowIndex
在 Quassnoi 的更新答案之后,我也将原始索引发布在表格上:
我在该表上有一个非聚集索引,其中包含列 iBatchNumber
、sFieldName
、sTableName
、iRowIndex
。该索引将 sFieldValue
作为包含的列。
正如 Quassnoi 所建议的(我想我现在明白为什么了)我已经更改了索引以具有以下顺序的列:iBatchNumber
、sTableName
、iRowIndex
,字段名
。我使用 sFieldValue
作为包含的列。执行计划不再包含任何SORT
,并且执行计划中的步骤数不到原来的一半,我希望也更快......
最佳答案
Do any of you know the reason for this? Or how to make the query below below more efficient?
您的查询使用 ORDER BY
。
这需要排序,排序需要临时空间。你不在这个空间内。
为避免这种情况,请在您的大表上创建一个复合索引:(col_filter_1, col_filter_2, col_order_1, col_order_2)
,其中 col_filter_n
是您筛选的列,并且col_order_n
是您排序的列。
这样的索引可用于过滤和排序过滤结果。
如果您发布您的实际查询(即您过滤和排序的表达式),我可能会更准确地告诉您如何创建这样的索引。
更新:
从您的查询中,我可以看出您需要 (iBatchNumber, sTableName, iRowIndex, sFieldName)
上的索引(按此顺序)。
如果您使 MD2
在连接中处于领先地位,它也可能会有所帮助:
WHERE
MD2.iBatchNumber = @iBatchNumber
ORDER BY
MD2.sTableName, MD2.iRowIndex
查看执行计划并确保未使用SORT
操作。
关于sql - 巨大表的 MSSQL 游标无法分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/709333/
我在我的 Linux(Ubuntu 16.04)服务器上安装 MSSQL 时遇到问题。 我使用了微软的手册,但我总是在同一阶段失败。 实际上,由于内核问题,Docker 不是替代品。 后: sudo
我正在尝试导入 mssql 我有一个 js 文件,它自己可以正常工作,但我需要这样做,以便我可以从 react js 环境中调用该函数,而不仅仅是节点 import React, { Componen
我对 python 比较陌生,对 django 也很陌生。 我正在尝试使用 django 连接到 MSSQL 服务器。我安装了django-mssql(也许它需要放在项目目录中的某个地方?)。 但是,
我想为我的项目使用 mssql 数据库。我采用了 node-mssql 模块 ( https://www.npmjs.com/package/mssql ) 并使用 Microsoft SQL Ser
我试图恢复 centos 服务器内的 mssql 文件。 .bak 文件已放入服务器并将用户设为 mssql。 [![在此处输入图像描述][1]][1] 这是我运行此命令进行恢复时的错误。 sqlcm
我正在尝试建立从 MSSQL (express 2008) 到 Mysql 的特定查询记录集的单向同步。这是该查询。 SELECT [datafk] ,[datahistorypk] ,[da
我正在尝试在 node.js 中编写脚本来查询 MSSQL 数据库。我是 javascript 的新手,node.js 的新手,VSCode 的新手,但我知道一些关于 SQL 的事情。我有工作代码,但
我正在尝试将我的 Golang 应用程序连接到 MSSQL 2014。 我已经成功使用 - https://github.com/denisenkom/go-mssqldb为此,我只在我的 MSSQL
在一个应用程序中,我有一个全局作用域 var db *sql.DB 稍后调用 slcstrSource, slcint64Timestamp, slcstrContent, err := DB_fun
我从服务器 A 创建了一个具有以下规范的 .bak 文件(备份):Windows Server 2003、MSSQL 2005。现在我想在具有以下规范的新服务器 B 上恢复此备份:Windows 8、
我的任务是将 Microsoft SQL Server 2005 数据库迁移到 MySQL 5.6(这些都是本地运行的数据库服务器),非常感谢您的帮助。 -MSSQL 源数据库有 latin1 排序规
我在这里不知所措。总的来说,我对 python 和 odbc 很陌生。但是,我需要找到一种方法,在 Web GUI 的后端有一个 python 脚本,作为我公司的内部工具,从以下位置与 MSSQL 服
下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SEL
1.--区分大小写 select * from a where a='AbCdE' collate Ch
-->分段更新 -->Author:wufeng4552 -->Date :2009-10-07 08:13:41 --如:更新'a,a,a,a,a' 第三段a 為 'test'
这几天突然有个想法:希望能够自动监控、收集数据库服务器的磁盘容量信息,当达到一个阀值后,自动发送告警邮件给DBA,将数据库磁盘详细信息告知DBA,提醒DBA做好存储规划计划,初步的想法是通过作业调用
看到网上好多人问为什么我的SQL 2008只能用服务器计算器名登录,而不能用IP登录呢?我也遇到过这个问题,看到网上的回答各有千秋,但没有一个写得比较便于操作的。经过一番网络关键字(SQL 2008
最近在做一个几百万条数据的分页查询,研究了各种方案,在本机上用项目的实际数据库做测试,测试过程 is very 痛苦,不堪回首ing。现在废话不多说,直接上结果,相信这也是大多数搜索答案的人最愿意看
MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database mf2011 --创
地图数据存放在sqlserver 2008中,使用mapxtreme7 开发时,使用Feature.Update()方法时出错的提示包含“MSSQL 将截断字符串或二进制数据” 主要原因就是给某个
我是一名优秀的程序员,十分优秀!