在数据仓库中,我将一个事实表连接到 20 个维度。事实表有 3200 万行和 30 列。这是一个临时登台表,因此我不必处理其他用户读取或写入该表。我从基表中选择 10 列,从相应维度中选择 20 列。维度表很小(在 3 到 15.000 行之间)。连接的字段是整数和 nvarchars。我使用 SELECT ... INTO 语句。表上没有索引。
此查询的执行速度太慢而无用。
由于查询处理时间太长,我尝试了以下解决方案:
这些发现使我将实际执行计划包括在内,该计划表明 89% 的成本在于表插入。其他成本是 8% 的事实表表扫描和 2% 的内连接哈希匹配。
我只想获取具有值NULL和其他值而不是NULL特定用户名列的行。
如果该特定用户名的两行都为 null,或者两者都有一些非 null 的值,则它不应出现在输出中。如果同一个用户名有两行以上的空值和一些其他值,那么它们应该出现。
下面是示例示例和输出。如何使用 sql 查询来完成?
+----------+-------+
| username | col2 |
+----------+-------+
| a | abc |
| a | ef |
| b | null |
| b | null |
| c | der |
| c | null |
+----------+-------+
Run Code Online (Sandbox Code Playgroud)
输出
+----------+------+
| username | col2 |
+----------+------+
| c | der |
| c | null |
+----------+------+
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个简单的查询来获取在 11 月创建的所有行:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
Run Code Online (Sandbox Code Playgroud)
SMSS 返回:
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我不明白为什么当“创建”设置为日期时间时数据从 varchar 转换为日期时间:
我需要告诉服务器“创建”是日期时间吗?如果没有,为什么我会收到此 varchar 消息?
编辑:数据库中的值为YYYY-MM-DD. 下面来自@SqlZim 的回复说我需要使用 convert() 来告诉 sql 数据库中的日期格式 - 并用字母 T 替换空格字符:
select count(*)
from dbo.profile
where [created] between convert(datetime,'2014-11-01T00:00:00.000')
and convert(datetime,'2014-11-30T23:59:59.997');`
Run Code Online (Sandbox Code Playgroud) SQL 服务器根目录 (X:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log) 中的“日志”文件夹 SIZE 变得太大,约 80 GB。
当我查看时,我看到该文件夹中有很多 SQLDumpxxxx.mdmp /SQLDumpxxxx.txt 文件。
10倍
我试图找到一种方法来弄清楚我的几个 sql 数据库何时脱机。
我检查了日志,但找不到任何此类信息,而且没有启用默认跟踪。
我只是有一个信息,之前有一位 DBA 将其离线,但没有电子邮件或书面通信等。
我们能找到这方面的信息吗?
请推荐,谢谢!
我已经在环境中的几个 SQL Server 实例上安装了监控软件。我试图找到瓶颈并解决一些性能问题。我想知道某些服务器是否需要更多内存。
我对一个计数器感兴趣:页面预期寿命。在每台机器上看起来都不一样。为什么在某些情况下它会经常更改,这意味着什么?
请查看上周在几台不同机器上收集的数据。你能对每个实例说些什么?
大量使用的生产实例(1):

适度使用的生产环境 (2)

很少使用的测试实例(3)

大量使用的生产实例 (4)

适度使用的测试实例(5)

大量使用的数据仓库 (6)

编辑:我为所有这些服务器添加了 SELECT @@VERSION 的输出:
Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 2: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: …Run Code Online (Sandbox Code Playgroud) sql-server memory sql-server-2008-r2 sql-server-2012 page-life-expectancy
我有一个不容易弄清楚的情况,我想我会在这个论坛上问其他人是否有建议。
我在 Windows Server 2008R2 Enterprise 上运行 SQL Server 2008 R2 Standard SP3。
一个数据库需要一些维护,事后我需要在另一台服务器上恢复。我使用 COPY_ONLY 和一组 4 个 tlog 备份完成了完整的数据库备份。
FULL为BULK_LOGGED恢复模式BULK_LOGGED为FULL恢复模式由于还原服务器上的驱动器号更改,所有备份的还原必须使用 WITH MOVE。
恢复步骤:
RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK …Run Code Online (Sandbox Code Playgroud) 我正在学习执行计划并尝试不同的查询并比较它们的性能并偶然发现了这一点:
SELECT StatisticID
FROM (
SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn
FROM FTCatalog.Statistic
) AS T
WHERE T.rn <= 1000
ORDER BY rn
SELECT TOP 1000 StatisticID
FROM FTCatalog.Statistic
ORDER BY StatisticID
Run Code Online (Sandbox Code Playgroud)
它们都返回相同的结果集 - 但是第一个执行速度更快并且资源消耗更少(至少 SSMS 告诉我)这是执行计划:

与 SQL 查询计划资源管理器的比较:
谁能给我一些关于幕后实际发生的事情以及结果为何不同的见解?如果您还有什么需要 - 请告诉我。
谢谢,埃瓦尔达斯。
我正在寻找一个 SQL Server 函数,它可以让我取平均值,不包括异常值。基本上是这样的:
1, 2, 1, 2, 7
平均为 1.5。
我将在财务分析 Microsoft SQL 脚本中实现这一点。
我的查询太长太复杂,不适合在这里,而且我不想公开发布。AVG看起来它本身没有排除异常值的选项,尽管它确实包含PARTITION BY.
我有这个代码:
DECLARE @MyTable AS TABLE
(
[Month] INT,
Salary INT
);
INSERT INTO @MyTable VALUES (1,2000), (1,3100);
SELECT [Month], Salary FROM @MyTable;
Run Code Online (Sandbox Code Playgroud)
输出:

我想NVARCHAR合并工资(按月分组),这样它就会是这样的:'2000,3100'
我将如何有效地做到这一点?
sql-server ×10
aggregate ×2
t-sql ×2
concat ×1
datetime ×1
functions ×1
insert ×1
join ×1
memory ×1
offline ×1
optimization ×1
performance ×1
recovery ×1
restore ×1