堆上的高碎片会影响查询性能吗?
我可以重建堆ALTER TABLE REBUILD以消除碎片吗?
这是用于报告的临时表。它确实有非聚集索引,但没有聚集索引。
我在 SO、MSDN 和其他各种来源上进行了一些搜索,发现了很多关于事务的问题,但似乎没有一个正是我正在处理的问题。
诚然,尽管我确实了解 ACID 和事务的概念,但我仍然是初级 DBA。我正在处理一个 SQL 脚本:
上述所有操作都是独立工作的,并且在(我认为是)单个事务中包含时,它们也会协同工作。我试图理解的是,当事务的另一部分失败时,事务的“部分”如何完成(并可能提交)。
为简洁起见,假设我有名为“ProcessReport”和“RetrieveReport”的工作程序。这两个过程中的动态 SQL 都以“SELECT”开头,然后从那里开始构建。测试用例:
CREATE TABLE ReportTable (FirstName VARCHAR(100), LastName VARCHAR(100), OrderId INT);
GO
CREATE PROCEDURE ProcessReport
AS
BEGIN
DECLARE @SQL VARCHAR(4000)
-- start creating dynamic sql
SET @SQL = 'SELECT FirstName, LastName, '
--create rest of dynamic SQL here...
INSERT INTO ReportTable (FirstName, LastName) EXEC(@SQL)
END
GO
CREATE PROCEDURE RetrieveReport
AS
BEGIN
DECLARE @SQL VARCHAR(4000)
-- start creating dynamic sql …Run Code Online (Sandbox Code Playgroud) 我有一个问题,关于一个问题,它是 70-462 Microsoft 考试的一部分。
我今天有这个问题,我不完全确定正确答案。虽然我确实通过了考试,但我想了解这种情况下的正确解决方案。
如果我没记错问题,您管理的是 2012 SQL Server,要求是将 OLTP 数据库的分钟报告卸载到另一台服务器,并且还能够向辅助数据库添加索引。
问题的答案大致如下:
最初我排除了异步提交选项(延迟)、不同数据中心的同步提交 AG 组(延迟?)、日志传送(延迟)和快照复制选项。
这给我留下了同一个子网上的同步提交 AG 组,或具有事务复制的 SQL 服务器。
基于https://msdn.microsoft.com/en-us/library/ff878253.aspx,我读到如果你想在你的活动辅助节点上建立索引,你必须在你的主要节点中创建它们。我将这个问题解释为要求能够在主服务器上创建索引,而这些索引在主服务器上不存在(包括用于报告的索引,或者其他什么不存在)。
另一个答案,单独指的是 SQL Server,这听起来不像我们要添加“另一台服务器”来卸载工作。
我是否误解了问题/要求?正确答案/解决方案应该是什么?
我在我的一个数据库上运行 DBCC CHECKDB,但它需要很长时间。我有一些问题请帮助我。
有没有其他方法可以检查我的数据库完整性?
我应该等待完成它吗?
DOUBLESQL Server中有保留关键字,但我知道它不是数据类型(其他语言的double是float或real在SQL Server中);有谁知道为什么这是一个关键字?
我尝试在 SQL Server 2008 和 SQL Server 2012 中使用它,但不能将其用作数据类型或函数,并且在 MSDN 页面中找不到任何信息;只是它是一个保留关键字而不是数据类型。
所以我有一个表tbl,我试图在其中提取以可变速率递增的数据。我需要确定数据何时重置,以便我可以得出一个累积值。这是一个示例表:
ID VAL
1 12
2 2
3 14
4 20
5 24
6 25
7 2
8 11
9 14
10 15
11 18
12 0
13 5
Run Code Online (Sandbox Code Playgroud)
如何在 SQL 查询中识别哪些行已重置数据?
在此表示例中,我想将行 ID 2、7 和 12 标识为数据重置的点。
最终结果是,我可以将第 1、6 和 11 行(以及其他数据)添加到当前值以获得总累积值。
我有按月临时表的产品销售。(更大的历史表的子集)我正在运行查询以查找在指定的 6 个月范围内之前几个月未售出的新产品。因此,以 1 月为基础,在 2 月向我展示所有未在 1 月销售中销售的新产品。3 月所有未售出的新产品 1 月或 2 月销售等。前 5 个月查询返回次秒。第 6 个月,大约需要 5 分钟。比较执行计划,在第 6 个月,它显示我的执行计划中的 Top 运算符花费了额外的时间。但我没有在选择中排序或使用 Top X。我的查询中是什么导致了这种情况?我可以等 5 分钟,因为它是一次性请求,但我更多是从学习的角度询问,我想了解它为什么添加到 Top 运算符。提前致谢。
select divn_nbr, dept_nbr, vendorNumber, pid, nrfcolorNumber, periodcode
from ##tmpSFA a
where periodCode = '201512'
and not exists
(
select 1 from ##tmpSFA b
where ISNULL(a.divn_nbr, -99) = isnull(b.divn_nbr, -99)
and isnull(a.dept_nbr, -99) = isnull(b.dept_nbr, -99)
and isnull(a.vendorNumber, -99) = isnull(b.vendorNumber, -99)
and isnull(LTRIM(rtrim(upper(a.pid))), -99) = isnull(LTRIM(rtrim(upper(b.pid))), -99)
and isnull(a.nrfcolorNumber, -99) …Run Code Online (Sandbox Code Playgroud) 我有样本数据:
CREATE TABLE #T (Name varchar(5), GroupId int NULL)
INSERT INTO #T (Name) VALUES
('A'),
('A'),
('A'),
('B'),
('B'),
('C'),
('D'),
('D')
Name GroupId
----- -----------
A NULL
A NULL
A NULL
B NULL
B NULL
C NULL
D NULL
D NULL
Run Code Online (Sandbox Code Playgroud)
如何按名称对数据进行分组,并在其后写入 groupId(顺序,可能是身份)?这就是我想要得到的:
Name GroupId
----- -----------
A 1
A 1
A 1
B 2
B 2
C 3
D 4
D 4
Run Code Online (Sandbox Code Playgroud)
要分组的表有大约 15m 行。如何更好地做到这一点?谢谢!
我为这个微不足道的问题道歉,但我试图弄清楚如何RIGHT在 SQL 中执行 a所以我实验性地输入RIGHT并且它没有以紫色突出显示,所以我花了一些时间来思考如何使用子字符串和长度来做到这一点,然后我后来发现这RIGHT是完全有效的。
为什么它没有突出显示紫色?
将 SQL Server 2012 备份还原到 SQL Server 2014 实例并更新兼容性级别时,理想(或必要)的调用顺序是什么?
-- Update Statistics for all tables
EXEC sp_MSforEachtable 'Update Statistics ? with FULLSCAN';
-- Update page and row counts in catalogviews
DBCC UPDATEUSAGE('MY_DATABASE') ;
-- Change DB Compatibility level
EXEC sp_dbcmptlevel 'MY_DATABASE', '120';
Run Code Online (Sandbox Code Playgroud)
我不确定数据库兼容性级别是否会影响统计数据或简化服务器上的引擎。如果数据库兼容性级别影响统计信息,则应在更新统计信息之前完成。也不清楚是否仍然推荐 UPDATEUSAGE 以及是否也应该在更新统计信息之前。
sql-server-2012 ×10
sql-server ×7
t-sql ×2
acid ×1
dbcc-checkdb ×1
heap ×1
rank ×1
replication ×1
ssms ×1
top ×1
transaction ×1