Questions tagged «sql-server-2005»

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



6
如果我们在sql-server中启用读取已提交的快照,会有什么风险?
我在这里已经读到,每行将存储一些额外的数据,因此我们可能会看到性能下降,但是还有哪些其他风险? 例如。这会影响数据库的恢复吗?我们还需要采取其他措施来利用这一优势吗? 我计划执行以下命令: ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON 我相信这将使我们更接近oracle,如果一个事务正在更新,其他事务仍可以读取旧数据。这个对吗? 我正在研究此问题,因为我厌倦了SQL Server 2005中的锁定问题。我希望这可以减少用户偶尔看到的死锁,有助于提高应用程序的整体性能,并鼓励我们的开发人员为每个事务执行多个操作而无需恐惧。


4
索引搜索与索引扫描
在查看运行缓慢的查询的执行计划时,我注意到一些节点是索引查找,而某些节点是索引扫描。 索引搜索和索引扫描之间有什么区别? 哪个表现更好? SQL如何选择一个? 我意识到这是3个问题,但我认为回答第一个问题将解释其他问题。

3
添加通配符时,SQL Server查询的速度显着下降(或顶部)
我有一个2千万只动物的动物园,可以在我的SQL Server 2005数据库中进行跟踪。其中约1%是黑色,其中约1%是天鹅。我想获取所有黑天鹅的详细信息,因此,不想淹没我所做的结果页面: select top 10 * from animal where colour like 'black' and species like 'swan' (是的,不建议您将这些字段设置为自由文本,但是它们都已编入索引)。事实证明,我们没有这种动物,因为查询会在大约300毫秒内返回空集。如果我使用'='而不是'like',它的速度大约是以前的两倍,但是我有一个预感,后者将为我节省一些输入时间。 事实证明,动物园的负责人认为他可能输入了一些“黑色”的天鹅,因此我相应地修改了查询: select top 10 * from animal where colour like 'black%' and species like 'swan' 事实证明,这些都不存在(事实上,除了“黑色”动物之外,没有“黑色%”动物),但是查询现在大约需要30秒才能返回空值。 看来这只是“ top”和“ like%”的组合造成麻烦,尽管 select count(*) from animal where colour like 'black%' and species like 'swan' 很快返回0,甚至 …

5
SQL Server维护计划-任务和计划的最佳实践
我的任务是为Sql Server 2005数据库设计维护计划。我知道要进行备份,我想每15分钟执行一次每日完整数据库备份和事务日志备份。我的问题在于弄清楚我想完成哪些其他任务以及应该多久执行一次。 因此,到目前为止,我已经牢记这一点。如果我的想法有任何缺陷或更好的解决方法,请纠正我。 备份-所有表,完整备份(每天) 备份-选定表,完整备份(每小时) 备份-事务日志(每15分钟) 检查数据库完整性(每天) 重组索引(每天) 更新统计信息(每天) 缩小数据库(每周一次) 重建指数(每周) 维护清理(每天) 我记得有一段时间读过(当我在另一份工作中制定类似计划时),其中一些任务不需要每天运行或不应该每天运行。至于哪一个,它逃脱了我。我可以使用一些指导来创建更好的维护计划,以减少灾难中的数据丢失,但在高峰时段运行时不会增加系统负担(也可以提高性能)。

5
我可以启动存储过程并立即返回而无需等待它完成吗?
我们有一个存储过程,用户可以手动运行该存储过程以获取全天不断使用的报告的一些更新编号。 我有第二个存储过程,应该在第一个存储过程运行之后运行,因为它基于从该第一个存储过程获得的数字,但是它需要更长的时间运行并且用于单独的过程,所以我不想让用户等待第二个存储过程运行。 有没有一种方法可以让一个存储过程启动另一个存储过程,然后立即返回而无需等待结果? 我正在使用SQL Server 2005。

10
如何使用SELECT INTO复制表但忽略IDENTITY属性?
我有一个带有标识列的表说: create table with_id ( id int identity(1,1), val varchar(30) ); 众所周知, select * into copy_from_with_id_1 from with_id; 也会导致copy_from_with_id_1的身份也为id。 以下堆栈溢出问题提到显式列出所有列。 我们试试吧 select id, val into copy_from_with_id_2 from with_id; 糟糕,即使在这种情况下,id也是一个标识列。 我想要的是一张桌子 create table without_id ( id int, val varchar(30) );

4
在索引中包含列的硬性和快速性规则
是否有任何硬性规定来决定应将哪些列以及应以什么顺序放入非聚集索引中。我只是在阅读这篇文章https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index ,我发现对于以下查询: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 张贴者建议制作这样的索引: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) 这是我的问题,为什么我们不能像这样做索引 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) 要么 CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) 什么原因导致发布者决定保留“姓氏”列。为什么不另列?以及如何决定应以什么顺序将列保留在那里?



2
哪一种效率更高:从链接服务器中选择还是插入到链接服务器中?
假设我必须将数据从一台服务器导出到另一台(通过链接的服务器)。哪种说法会更有效? 在源服务器中执行: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() 或在目标服务器中执行: INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') 哪一个会更快并且总共消耗更少的资源管理器(源服务器和目标服务器)?两台服务器都是SQL Server 2005。


7
在SQL Server 2005上获取最少的多列的最有效方法是什么?
我要从6列中获取最小值。 到目前为止,我已经找到了三种方法来实现此目的,但是我对这些方法的性能感到担忧,并且想知道哪种方法对性能更好。 第一种方法是使用大写语句。这是一个包含3列的示例,基于上面链接中的示例。我的案例陈述将更长,因为我将查看6列。 Select Id, Case When Col1 <= Col2 And Col1 <= Col3 Then Col1 When Col2 <= Col3 Then Col2 Else Col3 End As TheMin From MyTable 第二种选择是将UNION运算符与多个select语句一起使用。我将其放在接受Id参数的UDF中。 select Id, dbo.GetMinimumFromMyTable(Id) from MyTable 和 select min(col) from ( select col1 [col] from MyTable where Id = @id union …

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.