Questions tagged «sql-server-2005»

SQL Server 2005(主要版本9.00.xxxx)。还请标记sql-server。


4
包含表中所有列的主键有什么好处?
我有一个表,其中有四列都是不可为空的列,并且数据是如此,因此需要全部四列来区分唯一记录。这意味着如果要创建主键,则需要包含所有列。对表的查询几乎总是要拉回一条记录,即所有列将在查询中被过滤。 由于将需要搜索每一列,因此拥有主键是否对我完全有益(除了强制记录的唯一性)?

3
带有子查询的大表更新缓慢
对于SourceTable具有> 15MM的记录和Bad_Phrase具有> 3K的记录,以下查询需要将近10个小时才能在SQL Server 2005 SP4上运行。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 用英语来说,此查询计算的是Bad_Phrase中列出的,是字段Name中的子字符串的不同短语的数量,SourceTable然后将结果放入字段中Bad_Count。 我想要一些有关如何使此查询运行得更快的建议。

1
是否需要担心ASYNC_NETWORK_IO等待类型?
在查看需要花费很长时间才能执行的存储过程的列表时,最引人注目的是它。但是,大多数等待时间(81%)是ASYNC_NETWORK_IO,我知道原因:存储过程传输大约400 MB的信息。 在文档中,它指出ASYNC_NETWORK_IO的原因是客户端无法跟上大量数据的流传,这可能是事实。我不确定如何使客户端保持同步,因为它所做的只是通过ADO.NET调用存储过程,然后仅处理数据集。 因此,鉴于此信息,我是否应该担心此过程的ASYNC_NETWORK_IO等待类型?它实际上对服务器性能有影响吗? 其他信息: 我正在使用SQL Server 2005的Service Pack 2。 客户端应用程序与SQL Server位于同一盒子上(我知道,我知道...但是我对此无能为力)。

4
如何中断SQL脚本执行
我正在使用sql脚本,如果不满足某些条件,我有停止继续执行脚本的要求。 当我用Google搜索它时,我发现RaisError严重性级别为20会终止它。但是由于某些原因,我无法使用该选项。 能否请我提供停止SQL脚本执行的替代方法。


1
使用RECOMPILE查询提示时查询之间执行时间的巨大差异
我在同一SQL Server 2005实例上运行两个几乎相同的查询: 第一个是SELECTLINQ生成的原始查询(我知道,我知道...我不是应用程序开发人员,只是DBA :)。 第二个与第一个完全相同,最后添加一个OPTION (RECOMPILE)。 没有其他改变。 第一次运行需要55秒。 第二个需要2秒。 两个结果集是相同的。 为什么这个提示会带来如此惊人的性能提升? 的在线丛书条目RECOMPILE未提供详细的解释: 指示SQL Server数据库引擎在执行后放弃为查询生成的计划,从而迫使查询优化器在下次执行同一查询时重新编译查询计划。在不指定RECOMPILE的情况下,数据库引擎缓存查询计划并重新使用它们。编译查询计划时,RECOMPILE查询提示将使用查询中任何局部变量的当前值;如果查询在存储过程中,则将当前值传递给任何参数。 当只需要重新编译存储过程中的一部分查询而不是整个存储过程时,RECOMPILE是创建使用WITH RECOMPILE子句的存储过程的有用替代方法。有关更多信息,请参见重新编译存储过程。创建计划指南时,RECOMPILE也很有用。有关更多信息,请参见使用计划指南优化已部署应用程序中的查询。 由于我的查询有很多局部变量,因此我猜测当我使用OPTION (RECOMPILE)查询提示时,SQL Server能够(严重)优化它。 我到处看的人都说OPTION (RECOMPILE)应该避免。对此的解释通常是,使用此提示,SQL Server无法重用此执行计划,因此必须浪费时间每次重新编译它。(但是)鉴于巨大的性能优势,我倾向于认为这次使用此查询提示将是一件好事。 我应该使用它吗?如果没有,是否有一种方法可以强制SQL Server在没有此提示且不更改应用程序的情况下使用更好的执行计划?

2
使用动态SQL在指定的数据库中创建视图?
我正在写一个动态sql,以在不同的数据库中删除并创建视图。 所以我写道: set @CreateViewStatement = ' USE ['+ @DB +']; CREATE VIEW [dbo].[MyTable] AS SELECT ........something exec (@CreateViewStatement) 它给我错误: “ CREATE VIEW”必须是查询批处理中的第一条语句。 如果我删除USE DATABASE语句,它可以正常工作,但是不再指定数据库了。 我怎么解决这个问题?


1
DBCC CheckDB会丢失哪些类型的损坏?
这个问题是由较早的帖子提示的,我将一个数据库归档以备将来调查,该数据库已恢复,具体操作如下: BACKUP 'BrokenDatabase' detected an error on page (1:123456) in file ’BrokenDatabase.mdf'. Error: 3043, Severity: 16, State: 1. 在链接的问题和我准备进行DBCC PAGE调查的备份中,DBCC CHECKDB顺利通过,但显然存在损坏。 CHECKDB将通过但BACKUP WITH CHECKSUM失败将发生什么类型的损坏?

1
是否需要在非聚集索引中包含聚集索引列?
考虑到非聚集索引是基于聚集索引的,那么非聚集索引是否有必要列出聚集索引中包含的任何列? 换句话说,如果“产品”表在ProductID上包含聚集索引,则在创建非聚集索引时建议在其中包含ProductID列时,是否仍然需要将其添加为列? 如果不是,是否存在将列名添加到非聚集索引的好方案?


2
快速查看为SQL Server分配了多少RAM?
使用SQL Server 2005,您可以查看任务管理器,至少可以粗略地了解为SQL Server分配了多少内存。 使用SQL Server 2008,即使SQLServer:Memory Manager /总服务器内存(KB)性能计数器的状态为16,732,760,工作集或提交大小也不会真正超过500 MB。 是否有设置可以在任务管理器中实际显示服务器内存?还是它们更改了SQL Server中内存使用方式的结果


2
用于存储标志数组(位图/位数组)的数据类型
我需要为表的每个记录存储一个位数组,以支持以下操作: 测试是否设置了一个位,并设置了一个位(使用SQL) 使用ADO 2.8(而非ADO.NET)查询和设置值 索引编制(为了从“覆盖索引”功能中受益) 此数组中要存储的最大位数是固定的,但可以超过32。也就是说,简单的int列并不总是有效。 到目前为止,我的选择是: 使用多个int列 使用bigint(只要位数小于等于64即可工作) 使用二进制 ? 第一个选项可以工作,但是需要在访问数据的代码中进行大量重构。第二种选择只是暂时的解决方案,到目前为止,根据我的搜索,我不太确定ADO是否可以与bigint一起使用。我没有使用binary的经验,并且不知道其他任何选项。 根据要求,您会选择哪种数据类型?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.