我正在尝试为 SQL Server 2008 数据库创建一些索引,但收到以下错误消息。
消息 8606,级别 17,状态 1,第 1 行 此索引操作每个 DOP 需要 1024 KB 内存。DOP 为 2 的 2048 KB 总需求大于为高级服务器配置选项“索引创建内存 (KB)”设置的 sp_configure 值 704 KB。增加此设置或减少 DOP 并重新运行查询。
目前,索引创建内存设置为 794KB,每个查询的最小内存设置为 1024KB。更改这些值会产生什么影响?尤其是在性能方面。我应该更改它们,创建索引并将它们更改回来还是应该将其设置为 0?
我们有一个使用 Microsoft SQL 数据库的现成应用程序。在这个应用程序中,我们为每个报告挑选和选择各种选择标准。此应用程序然后运行这些报告。
我相信我们有一个查询计划问题。我们每天运行的第一个报表,运行速度非常快 7 分钟。我们在第一个报告之后运行的任何报告都需要一个多小时。
每天晚上,我们都会运行一个计划任务来停止和启动 SQL Server 代理和 SQL Server。在这个 SQL Server 实例中还有大约 25 个其他数据库。没有其他数据库有性能问题,只有我之前提到的现成产品。
有没有办法清除 SQL Server 当前内存中的所有查询计划?
如何在不影响依赖同一服务器上其他数据库的 30 个左右的用户的情况下执行此操作?
在我正在进行的这个项目中,我需要将特定字段设置为唯一(不是问题!)但如果该字段为空,我希望忽略约束。在 Sql Server 2008 中,我使用如下所示的过滤索引,但这在早期版本的 SQL 中不可用!
CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
但我不认为这在 SQL Server 2005 中可用。事实上,这篇博客文章表明有一种使用触发器来检查唯一性的解决方法。有没有人有这样的例子?或者也许是另一种选择?
不幸的是,升级到 SQL Server 2008 不是这个特定客户端的选项!!
最近,我不再只是在文件利用率接近 80% 时增加文件,而是更主动地通过常用技巧回收空间,例如对堆进行碎片整理、添加和删除聚集索引、实现行或页面压缩等。
但是,在某些情况下,我可以通过执行DBCC CLEANTABLE回收更多空间。我的环境中有数百个数据库,不可能知道用户在每个数据库中做了什么,并且完全可以接受涉及删除固定长度列的更改。我通常通过查看我编写的一些对象空间利用脚本中的行数与页数来发现这些机会。我想通过尝试自动检测这些场景来更进一步。
我想知道的是,是否有人在积极监控此类机会,如果是,您具体在寻找什么?
我的想法是写一些东西,收集一行的最大和最小大小、表中的行数、分配的页数和使用的页数,然后做一些基本的数学运算来记录结果远远超出了“预期”。
我们的企业标准之一是为用户表/索引使用单独的文件组/文件。这被设置为默认值,因此无需限定 CREATE TABLE 语句。
所以它看起来像这样
这里的任何人都可以帮助我理解为什么强制执行此操作的原始理由吗?
我会坦白说我认为这是巫毒教。上午我错了......?
编辑:我知道如何使用文件组来分离索引/分区/存档,以及如何逐步恢复。这个问题是关于在同一卷上为系统表使用单独的文件组。
如何修改带有索引的表的类型?我试图在一个空表上做一个改变列来修改从日期时间到 varchar(15) 的类型,并得到错误说它依赖于列(结果是索引)。
通过右键单击索引并编写 drop 脚本,我能够在本地轻松解决此问题,但是我需要在无法访问索引名称的其他服务器上推出此功能。
有没有办法制作一个可以删除任何索引的脚本,让我在列上更改数据类型然后读取索引?谢谢!
使用 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
Run Code Online (Sandbox Code Playgroud) 我有一个包含不同长度整数的 VARCHAR 列的数据库。我想对它们进行排序,所以 10 在 9 之后,而不是 1,并且 70A 在 70 之后。我可以使用WHERE 子句中的PATINDEX()、CTE 和 CASE 语句来做到这一点。
但是,我想知道是否有不需要的整理。
在 Microsoft SQL 服务器中,如何使用 T-SQL 添加/更改现有表列的默认值?
这个问题必须在这个网站上:)
禁止在视图中使用 ORDER BY,正如我所理解的,因为在使用此视图时可能存在多个 order by。
例如TOP 99.999999 PERCENT,我知道有一些方法可以绕过此限制,但我想知道最佳实践是什么,而不是如何破解它。
所以,如果我想在我的数据库中创建供个人使用的视图,这意味着我想连接到数据库并只看到固定和排序的数据,如果我不能订购视图,我该怎么做?
目前在我的 SQL Server 数据库中,我对TOPhack有意见,我经常使用它们,但感觉不对。
sql-server ×10
constraint ×2
query ×2
alter-table ×1
collation ×1
ddl ×1
filegroups ×1
natural-sort ×1
order-by ×1
performance ×1
scripting ×1
sorting ×1
view ×1