Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

2
SQL Server:是否有人使用大页面分配调整选项?
有没有人使用过使用的调整选项TF834 large page allocations。我只是在阅读有关它的MS文章,并且想知道是否有人使用过它并看到了性能提升。有什么需要注意的小窍门,陷阱吗? 该服务器是Windows 2008 64位,128 GB RAM,4个CPU 8核心超大型(总共64核心)SQL2005服务器。我希望调整服务器以更好地使用其规格,而不仅仅是使用当前已在其上完成的默认SQL安装。任何额外的提示都将受到欢迎。

2
与索引相关的NOT逻辑的使用
根据Microsoft的有关数据库开发的书,考试70-433:Microsoft SQL Server 2008数据库开发: 前导通配符和NOT逻辑都不允许查询优化器使用索引来优化搜索。为了获得最佳性能,应避免使用NOT关键字和前导通配符。 所以我认为是NOT IN,NOT EXISTS等等 现在关于这个SO问题,我认为@GBN选择的解决方案将违反上面给出的声明。 显然,事实并非如此。 所以我的问题是:为什么?

3
视图中ORDER BY子句的替代方案是什么?
这个问题只需要在此站点中即可:) 据我了解,ORDER BY被禁止在视图中使用,因为使用此视图时可能会进行多个排序。 我知道有很多方法可以绕过此限制,例如TOP 99.999999 PERCENT,但是我想知道什么是最佳实践,而不是如何破解它。 因此,如果我想在数据库中创建供个人使用的视图,这意味着我想连接到数据库并仅查看固定和排序的数据,如果无法订购视图,该怎么办? 当前在我的SQL Server数据库中,我有关于该TOPhack的视图,并且我经常使用它们,但是感觉不对。



5
按小时按大型数据集分组
我使用MS SQL 2008从250万条记录中选择一个平均字段。每条记录代表一秒钟。MyField是这些1秒记录的每小时平均值。当然,服务器CPU达到100%,选择时间太长。我可能需要保存这些平均值,以便SQL不必在每个请求中都选择所有这些记录。该怎么办? SELECT DISTINCT CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour, MIN([timestamp]) as TimeStamp, AVG(MyField) As AvgField FROM MyData WHERE TimeStamp > '4/10/2011' GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) ORDER BY TimeStamp
12 sql-server  query 

4
在列上放置约束(索引)
如何修改具有索引的表的类型?我试图在一个空表上做一个alter列,以将类型从日期时间修改为varchar(15),并收到错误消息说它对列有依赖性(原来是索引)。 通过右键单击索引并编写脚本脚本,可以轻松地在本地解决此问题,但需要在无法访问索引名称的其他服务器上进行扩展。 有没有办法使脚本删除所有索引,让我在列上更改数据类型,然后读取索引?谢谢!



2
SQL Server 2005中对可空列的唯一约束
在这个我正在从事的项目中,我需要将一个特定的字段设置为唯一(不是问题!),但是如果该字段为null,则希望忽略约束。在Sql Server 2008中,我使用如下所示的过滤索引,但是在早期版本的SQL中不可用! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL 但是我认为SQL Server 2005中不提供此功能。实际上,此博客文章指出,存在一种使用触发器检查唯一性的解决方法。有人有这样的例子吗?还是替代方案? 不幸的是,对于此特定客户端,无法升级到SQl Server 2008!

3
如何从Microsoft SQL Server中清除所有旧查询计划?
我们有一个使用Microsoft SQL数据库的现成应用程序。在此应用程序中,我们为每个报告选择各种选择标准。然后,该应用程序将运行这些报告。 我相信我们有一个查询计划问题。我们每天运行的第一份报告非常快地运行了7分钟。我们在第一个报告后生成的任何报告都需要一个多小时。 每天晚上,我们运行一个计划的任务,该任务将停止并启动SQL Server代理和SQL Server。这个SQL Server实例中大约还有25个其他数据库。没有其他数据库存在性能问题,只有我之前提到的现成产品。 有没有一种方法可以清除SQL Server当前在内存中的所有查询计划? 如何做到这一点而又不影响依赖同一服务器上其他数据库的30多个用户?

1
在SQL Server中更改索引创建内存设置有什么影响?
我试图在SQL Server 2008数据库中创建一些索引,但是却收到以下错误消息。 消息8606,级别17,状态1,第1行此索引操作每个DOP需要1024 KB的内存。DOP为2的2048 KB的总需求大于为高级服务器配置选项“索引创建内存(KB)”设置的sp_configure值704 KB。增加此设置或减少DOP并重新运行查询。 当前,索引创建内存设置设置为794KB,每个查询的最小内存设置为1024KB。更改这些值会产生什么影响?特别是在性能方面。我应该更改它们,创建索引然后将其更改回还是应该将其设置为0?


1
使用函数DECRYPTBYPASSPHRASE时,我怎么知道SQL Server用来解密加密数据的哈希算法?
我的问题与以下两个实例的实验有关: SQL Server 2017 Express实例(Microsoft SQL Server 2017(RTM-CU16)) SQL Server 2014 Express实例(Microsoft SQL Server 2014(SP2-CU18)) 我使用函数ENCRYPTBYPASSPHRASE加密文本,并将结果用作DECRYPTBYPASSPHRASE的@ciphertext。我的测试结果如下: 根据此Microsoft修复程序, [...] SQL Server 2017使用SHA2哈希算法来哈希密码。SQL Server 2016和早期版本的SQL Server使用不再被视为安全的SHA1算法。 但是,如果在函数DECRYPTBYPASSPHRASE上没有与该参数相关的参数,它怎么知道用于加密数据的算法是什么?它是加密数据的一部分吗? 根据我的测试结果,我猜想SQL Server总是使用实例上可用的较新版本的算法来加密数据,但是尝试所有算法来解密数据,直到找到适合的算法或找不到对应的算法时返回NULL。 。不过,这只是一个猜测,因为我找不到任何方法来检查SQL Server用于解密加密数据的哈希算法。

1
如果索引中包含VARCHAR(MAX)列,则整个值是否始终存储在索引页中?
我是出于好奇而问这个问题,受到这个问题的启发。 我们知道,VARCHAR(MAX)长于8000字节的值不会存储在行中,而是存储在单独的LOB页中。随后使用该值检索一行需要两个或多个逻辑IO操作(从本质上讲,比理论上需要多一个)。 如链接的问题所示VARCHAR(MAX),我们可以将列INCLUDEd 添加到唯一索引。如果此列的值长度超过8000个字节,这些值是否仍将“内联”存储在索引叶页中,还是将它们移到LOB页中?

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.