我有一个用户表:
|Username|UserType|Points|
|John |A |250 |
|Mary |A |150 |
|Anna |B |600 |
Run Code Online (Sandbox Code Playgroud)
和级别
|UserType|MinPoints|Level |
|A |100 |Bronze |
|A |200 |Silver |
|A |300 |Gold |
|B |500 |Bronze |
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个查询来获取每个用户的级别。类似的东西:
SELECT *
FROM Users U
INNER JOIN (
SELECT TOP 1 Level, U.UserName
FROM Levels L
WHERE L.MinPoints < U.Points
ORDER BY MinPoints DESC
) UL ON U.Username = UL.Username
Run Code Online (Sandbox Code Playgroud)
这样的结果将是:
|Username|UserType|Points|Level |
|John |A |250 |Silver |
|Mary |A |150 |Bronze |
|Anna |B |600 …Run Code Online (Sandbox Code Playgroud) 当我使用 sp_BlitzFirst 跟踪等待时,我得到以下详细信息:
<?ClickToSeeDetails --
For 20 seconds over the last 5 seconds, SQL Server was waiting on this
particular bottleneck.
-- ?>
Run Code Online (Sandbox Code Playgroud)
应该是“过去 5 秒内 20 次”吗?发现是 CLR_SEMAPHORE。
我有一个包含约 2 亿行和约 15 列的表。我打算COLUMNSTORE在我的表上创建一个索引。
根据我在列存储索引中使用的列顺序,性能是否会有任何变化?如果是,其背后的逻辑是什么?
index database-design sql-server sql-server-2012 columnstore
是否可以使用 SSMS 连接到 DAC?如果我理解正确,应该可以在服务器名称前使用“admin:”前缀,但我收到以下消息:
SSMS 不支持专用管理员连接,因为它按照设计建立了多个连接。(Microsoft.SqlServer.Management.SqlStudio.Explorer)
当您将 Columns 文件夹拖到编辑器窗口时,将添加不带括号的完整列列表。如果您单独拖动列,则它们具有括号。
有没有办法把它关掉?我在选项中找不到任何东西,而且它们真的很让人分心。
系统存储过程 sp_dboption 在 SQL Server 2012 中不再可用。怎么可能换掉?
我是管理员,只需运行以下命令:
sqllocaldb start v11.0
Run Code Online (Sandbox Code Playgroud)
结果:
Start of LocalDB instance "v11.0" failed because of the following error:
Error occurred during LocalDB instance startup: SQL Server process failed to sta
rt.
Run Code Online (Sandbox Code Playgroud)
事件查看器日志事件 ID:528
Windows API 调用 WaitForMultipleObjects 返回错误代码:575。Windows 系统错误消息是:{Application Error} 应用程序无法正确启动 (0x%lx)。单击确定关闭应用程序。在第 3621 行报告。
我尝试了另一个(用户和管理员)帐户,它们没有问题。
我卸载并重新安装了 2012 版的 SQLLocalDB.msi,但我没有运气。你有什么想法和解决办法吗?
我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用数以万计的插入行填充表(因为我不熟悉如何编程)。我在这个特定表格中看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即 1)。
当我想重新运行一个新的测试时,我删除了有问题的表,然后运行以下命令:
DROP SEQUENCE foo.fee;
GO
DROP SCHEMA foo;
GO
Run Code Online (Sandbox Code Playgroud)
当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,这些命令按以下顺序触发:
CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
Run Code Online (Sandbox Code Playgroud)
然后我创建表:
CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)
GO
Run Code Online (Sandbox Code Playgroud)
完成后,我运行以下插入命令 50,000 次:
INSERT INTO [foo].[sample_table_with_data]
(
[order_number],
[sample_column_one],
[sample_column_two],
[sample_column_three]
)
VALUES
(
NEXT VALUE FOR foo.fee,
'Blah',
'Blah Blah',
'Blah …Run Code Online (Sandbox Code Playgroud) 运行我们的企业 ERP (Dynamics AX 2012),我注意到我们的生产环境似乎比我们的开发系统慢得多。
在运行跟踪的同时在开发和生产环境中执行相同的活动后,我确认与开发相比,SQL 查询在我们的生产环境中的执行速度非常慢(平均慢 10-50 倍)。
起初我将此归因于负载,并在下班时间在生产环境上重新运行相同的活动,并在跟踪中发现相同的结果。
我清除了 SQL Server 中的等待统计信息,然后让服务器在正常生产负载下运行一段时间,然后运行以下查询:
WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
N'CLR_SEMAPHORE', N'LAZYWRITER_SLEEP',
N'RESOURCE_QUEUE', N'SQLTRACE_BUFFER_FLUSH',
N'SLEEP_TASK', N'SLEEP_SYSTEMTASK',
N'WAITFOR', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH',
N'XE_TIMER_EVENT', N'XE_DISPATCHER_JOIN',
N'LOGMGR_QUEUE', N'FT_IFTS_SCHEDULER_IDLE_WAIT',
N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT',
N'CLR_AUTO_EVENT', N'DISPATCHER_QUEUE_SEMAPHORE', …Run Code Online (Sandbox Code Playgroud) 我们开始设计数据集市/仓库的构建块,我们需要能够支持所有时区(我们的客户来自世界各地)。从在线(和书籍)阅读讨论来看,一个常见的解决方案似乎是在事实表中具有单独的日期和时间维度以及时间戳。
但是,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我很难处理日期维度。日期维度的一般设计方法通常包括日期名称、星期几、月份名称等属性。我遇到的所有问题是 UTC 时间 2013 年 12 月 31 日星期二晚上 11:00 是星期三, 2014 年 1 月 1 日,在 UTC+2 之后的所有时区。
因此,如果我必须对每个查询(和报告)进行所有这些时区转换,那么拥有和存储这些我可能永远不会使用(似乎)的属性有什么意义?有些人建议为每个时区设置事实行,但这对我来说似乎很荒谬。我们需要能够每月存储数百万条记录。
其他人建议有一个时区桥接表,虽然有一定的意义,但它似乎也需要额外的复杂性和额外的连接来完成我的客户端应用程序和报告应该能够轻松地从日期中找出的东西(报告将主要基于网络那里有无数的库可以帮助转换、显示和格式化日期)。
我唯一能想到的是按日期和小时分组的简便性和可能的性能,但是按日期部分分组的做法有多糟糕(我们正在使用 MS SQL,但我们将查询数百万行),或者我们应该考虑只是非常简单的日期和时间维度,大多数情况下不超过小时、日、月和年数字,因为大多数文字(例如星期一)在时区发挥作用时没有多大意义?
sql-server-2012 ×10
sql-server ×8
columnstore ×1
dac ×1
datetime ×1
index ×1
join ×1
max ×1
performance ×1
sequence ×1
ssms ×1
t-sql ×1
timezone ×1
wait-types ×1
waits ×1