我有一个看起来像这样的存储过程:
SELECT columnlist
INTO #temptable
FROM Table
JOIN lotsofothertables
WHERE severalconditions
UPDATE anothertable
SET column = #temptable.column
FROM anothertable
JOIN #temptable
ON anothertable.PKColumn = #temptable.PKColumn
Run Code Online (Sandbox Code Playgroud)
初始查询通常只生成几列 (<100),因此更新速度很快。但是偶尔(这些是我们遇到问题的运行)它会产生 1000 甚至 10,000 次。在它们之间添加这样的东西是否合理?
IF @@RowCount > 100
CREATE INDEX ix_temp ON #temptable(PKColumn)
Run Code Online (Sandbox Code Playgroud)
或者我最好只在表上创建索引,因为行很少,创建索引所花费的时间会相当少?
今天有人问我一个有趣的问题。我之前也思考过这个问题,但没有想出一个好的答案。
如果列的值仅 <= 255 个字符,那么使用 varchar(255) 和 varchar(max) 之间是否有任何真正的区别。
我意识到它varchar(255)有 255 个字符和 2 GB 的限制varchar(max),但它们只使用存储实际值所需的空间。我没有计算该var部分所需的额外空间,因为据我所知,它是相同的(或者是吗?)。那么在性能和空间方面有区别吗?
我正在尝试使用 SSIS 中的执行 SQL 任务填充变量。表结构如下:
CREATE TABLE BuildControl
(Id INT NOT NULL Identity, BuildDate Date,
Country char(2), BuildStatus varchar(20),
BuildStatusDate DateTime)
Run Code Online (Sandbox Code Playgroud)
SQL 语句是
SELECT TOP 1 ? = Id, ? = BuildDate
FROM BuildControl
WHERE BuildStatus IS NULL
ORDER BY Id
Run Code Online (Sandbox Code Playgroud)
如果我删除? = BuildDate. 参数映射选项卡如下所示:

我收到的错误是这样的:
SSIS package "WFG Statement Build.dtsx" starting.
Error: 0xC002F210 at Get Build Data, Execute SQL Task: Executing the query "SELECT TOP 1 ? = Id, ? = BuildDate
FROM BuildContr..." failed with the …Run Code Online (Sandbox Code Playgroud) 我的妻子一直要求我为她的企业创建一个 Web 应用程序,从我读到的内容来看,使用 SQL Azure 将是完美的。除了几个小的(真的很大)问题。
所以我的问题是,如果我将她的公司信息放在 SQL Azure 上,它的安全性如何?我不是在询问一般的 SQL Server/Azure 安全性。我说的是这是一个共享空间。绕过我实施的安全措施,入侵数据的可能性有多大?
我正在处理一个查询,以判断给定会话中哪些对象具有锁定,但我遇到了一些阻塞问题。
这是我的基本查询:
SELECT request_session_id AS session_id,
request_owner_id AS transaction_id,
OBJECT_SCHEMA_NAME(resource_associated_entity_id, resource_database_id),
OBJECT_NAME(resource_associated_entity_id, resource_database_id),
COUNT(1) AS lock_count
FROM sys.dm_tran_locks WITH (NOLOCK)
WHERE resource_type = 'OBJECT'
GROUP BY request_session_id, request_owner_id,
resource_database_id, resource_associated_entity_id
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,我偶尔会被实际持有锁的会话之一阻止。如果我删除OBJECT_NAME和OBJECT_SCHEMA_NAME然后我没有任何问题。我试过将信息转储到一个表中,然后在有类似问题的表中使用这些值的函数。
这让我相信问题出在OBJECT_NAME和OBJECT_SCHEMA_NAME函数中,但我不确定为什么或如何解决它。我也不确定为什么我有时会被阻止有时不会。有没有人有什么建议?
我正在尝试调整一个相当烦人的查询,其中许多表看起来像:
date = '9999-12-31 23:59:59.9999999'
Run Code Online (Sandbox Code Playgroud)
至少有几个表在 300 百万行范围内,当我过滤它时,我最终在 2 百万范围内。尝试过滤索引似乎是合理的。
CREATE TABLE test (col1 int PRIMARY KEY, col2 int, col3 varchar(50), col4 datetime2(7), col5 int);
CREATE INDEX ix_filtered ON test(col2,col3) INCLUDE (col4)
WHERE col4 = '9999-12-31 23:59:59.9999999' ;
GO
SELECT col2,col3 FROM test
WHERE col4 = '9999-12-31 23:59:59.9999999';
GO
Run Code Online (Sandbox Code Playgroud)
但是,当我检查查询计划时,它不会使用索引。它只是进行了聚集索引扫描和键查找。显然没有任何数据这是有道理的,但即使有我的所有数据,它也做同样的事情。我没有费心提供任何数据的原因是无论如何都会发生的第二个问题。
当我试图强制索引查看查询计划的样子时:
SELECT col2,col3 FROM test
WITH (index (ix_filtered))
WHERE col4 = '9999-12-31 23:59:59.9999999'
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
消息 8622,级别 16,状态 1,第 52 行 由于此查询中定义的提示,查询处理器无法生成查询计划。在不指定任何提示且不使用 SET FORCEPLAN 的情况下重新提交查询。
我试图弄清楚为什么我收到查询提示错误。我的猜测是,这个问题的答案也会告诉我为什么根本没有使用过滤索引。
根据我的阅读,配置 tempdb 的最佳实践包括创建多个数据文件。我理解的经验法则是,如果您应该创建与最多 8 个逻辑处理器相同数量的数据文件。然后,如果您有 tempdb 争用,请添加一个额外的文件,直到争用消失或您有每 4 个额外的逻辑处理器添加一个额外的文件。因此,如果您有 16 个逻辑处理器,那么您最多可以创建 10 个文件。
我很好奇的是 MAXDOP 是否会对此产生影响?因此,例如,如果我有 12 个逻辑处理器。我已将 MAXDOP 设置为 6,因为它们被分成 2 个 NUMA 节点。这是否意味着我应该为 tempdb 坚持使用 6 个数据文件?或者我是否仍然拥有推荐的处理器总数的 8 或 9?
sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 tempdb
我理解这rpc_completed被定义为远程过程调用sql_batch_completed的完成,并且是一个 t-sql 批处理的完成。但是,谁能具体解释一下有什么区别?我什么时候应该使用一种,什么时候应该使用另一种?大多数/所有 SQL 命令都会触发这两个事件吗?
sql-server-2008 sql-server-2008-r2 extended-events sql-server-2012
我有一个 select 语句,当在实时生产服务器上运行时,无论我做什么,都会返回 mm-dd-yyyy。这只发生在从另一个别名选择中选择日期时。简化(因为我的 sql 很长):-
select name,age,dob
from tblone as tbltemp1
Run Code Online (Sandbox Code Playgroud)
在这个选择中,dob 总是 mm/dd/yyyy 而不是 dd/mm/yyyy
select dob from tbltemp1
Run Code Online (Sandbox Code Playgroud)
希望这个解释有意义,如果有人可以帮忙吗?
sql-server ×6
blocking ×1
dmv ×1
index ×1
metadata ×1
performance ×1
security ×1
ssis ×1
t-sql ×1
tempdb ×1