我们有一张包含几百万行的生产表。我们运行了这个查询,它冻结了我们的数据库,
USE ExampleDatabase
GO
CREATE NONCLUSTERED INDEX IX_Table1_URL
ON [dbo].[Table1] ([URL])
GO
GO
CREATE NONCLUSTERED INDEX IX_Table1_LastModified
ON [dbo].[Table1] ([LastModified])
GO
GO
CREATE NONCLUSTERED INDEX IX_Table2_URL
ON [dbo].[Table2] ([URL])
GO
GO
CREATE NONCLUSTERED INDEX IX_Table2_LastModified2
ON [dbo].[Table2] ([LastModified2])
GO
Run Code Online (Sandbox Code Playgroud)
我是一名对索引知识非常有限的开发人员,我不知道从哪里开始,只是添加 Table1 和 Table2 都有数百万行。
如果ID = 01234并且此 ID 在一个月内进行了 3 次交易,如下所示:
***DAY_no Balance***
1/1/2018 5000
10/1/2018 10000
15/1/2018 12000
Run Code Online (Sandbox Code Playgroud)
我想要这样的数据:
***DAY_no Balance***
1/1/2018 5000
2/1/2018 5000
3/1/2018 5000
4/1/2018 5000
5/1/2018 5000
6/1/2018 5000
7/1/2018 5000
8/1/2018 5000
9/1/2018 5000
10/1/2018 10000
11/1/2018 10000
12/1/2018 10000
13/1/2018 10000
14/1/2018 10000
15/1/2018 12000
16/1/2018 12000
17/1/2018 12000
18/1/2018 12000
19/1/2018 12000
20/1/2018 12000
21/1/2018 12000
22/1/2018 12000
23/1/2018 12000
24/1/2018 12000
25/1/2018 12000
26/1/2018 12000
27/1/2018 12000
28/1/2018 12000
29/1/2018 12000
30/1/2018 12000 …Run Code Online (Sandbox Code Playgroud) performance sql-server subquery sql-server-2012 query-performance
考虑下表tbl:
id date
1 2016
1 2017
2 2017
2 2017
3 2016
3 2017
4 2018
5 2018
Run Code Online (Sandbox Code Playgroud)
如何仅获取具有相同 ID 但不同日期的行。
现在我只能获得超过 1 个计数的 id,如下所示:
select id, date
from tbl
group by id
having count(id)>1
Run Code Online (Sandbox Code Playgroud)
我怎样才能只获得 id 1 和 3 以及日期?
我们有一个数据库需要 40% 的日志文件随时可用,否则我们会收到警报。当达到限制时,我找不到设置增长的方法。
当然,我们可以将自动增长设置为某个限制,但随后我们必须每周进行一次以根据上次增长增加 40%。
有任何想法吗?SQL 2012
我在 Microsoft SQL Server 2012 服务器中有一个名为 FinTrans 的表,在任何给定时间都有大约 10K-30K 条记录,每天插入和删除大约 2K 条记录。
该表有 3nvarchar(max)列,用于保存事务的可能错误消息(3 种不同类型的消息,因此是单独的列)。每当列出表的内容时,nvarchar(max)也会读取这些列。列是nvarchar(max)因为它们的内容可能会超过 4K,但是机会很小(也许每周有一个记录)。
在这种情况下,最好将此列存储在与 FinTrans 表具有 1:1 关系的单独表中,还是我应该将列留在原处?
表格1
Id Name DemoID
1 a 33
2 b 44
3 c 33
4 d 33
5 e 44
Run Code Online (Sandbox Code Playgroud)
表2
Id DemoID IsTrue
11 33 1
12 44 1
Run Code Online (Sandbox Code Playgroud)
现在我们可以使用以下 2 个使用连接和使用子查询的查询来找到表 2 中存在哪个 DemoID,但是对于更多的记录,哪个更准确/更相关?
使用加入 -
SELECT Table1.Id FROM Table1 Table1 join Table2 Table2 on Table1.DemoID = Table2.DemoID
WHERE Table2.IsTrue = 1
Run Code Online (Sandbox Code Playgroud)
使用子查询 -
SELECT Table1.Id FROM Table1 Table1
WHERE Table1.DemoID in (select Table2.DemoID from Table2 Table2)
Run Code Online (Sandbox Code Playgroud) 正如标题所述,我有一个递归 CTE,当我更改 WHERE 子句中的运算符时,即使只有两行数据,它也会爆炸。
CREATE TABLE #Recursion
(Parent varchar(10), Child varchar(10), TopDate datetime)
INSERT INTO #Recursion (Parent, Child, TopDate)
VALUES
('00003137', '00003137', '2018-08-31'),
('04536347', '00003137', '2017-02-28'),
('05458040', '05458040', '9999-12-31'),
('00269705',' 05458040',' 9999-12-31')
;WITH
Parent AS
( SELECT parent
, child
, 1 as sort
, TopDate
FROM #Recursion
WHERE parent = child
UNION ALL
SELECT s.parent
, d.child
, d.sort + 1
, s.TopDate
FROM Parent as d
JOIN #Recursion s
ON s.child= d.parent
WHERE s.TopDate < d.TopDate
)
SELECT …Run Code Online (Sandbox Code Playgroud) 我有两台电脑。
一台机器运行sqlexpress,实例名为SQLEXPRESS
另一台机器运行 mssqlserver,实例是 MSSQLSERVER。
为什么 sqlexpress 在 .\sqlexpress 上运行而 mssqlserver 只在 .\ 上运行?
下面的查询用于创建一个带有服务器名称列表的文本文件。
我遇到的问题是文本文件的创建就像
Server, Server, Server etc.
Run Code Online (Sandbox Code Playgroud)
但我需要它如下
Server
Server
Server
Run Code Online (Sandbox Code Playgroud)
查询:
BEGIN
CREATE TABLE [TempPSWmiObjectQuery]
(QueryText nvarchar(max))
END
INSERT INTO [TempPSWmiObjectQuery]
SELECT STUFF((SELECT char(13)+char(10),
SUBSTRING(ServerName, 1,
CASE WHEN CHARINDEX(',', ServerName) > 0
THEN CHARINDEX(',', ServerName)-1
ELSE LEN(ServerName)
END)
FROM MasterList
FOR XML PATH('')), 1, 1, '')
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE
EXEC xp_cmdshell 'bcp SQLEnv.dbo.TempPSWmiObjectQuery out "\\ServerName\Data\temp\testlist.txt" -c -T -S "ServerName\Instance"'
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE
DROP TABLE TempPSWmiObjectQuery
Run Code Online (Sandbox Code Playgroud)
PowerShell 脚本:
$StagingServer = "ServerName\InstanceName"
$StagingServerDatabase = "SQLEnv"
foreach($line in
[System.IO.File]::ReadLines("\\ServerName\Data\temp\testlist.txt")) …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server powershell sql-server-2008-r2 sql-server-2012
我max_server_memory在我们的生产 SQL Server 上将设置配置为 141 GB,目标/总服务器内存为 144 GB。
我认为max_server_memory代表我愿意让 SQL Server 引擎使用多少内存,如果是这样,为什么它使用更多?
运行 SQL Server 2012 SP3,安装了 160 GB 内存的物理机,机器上没有运行其他实例,但我们也在运行集成服务。
我们有 75 个用户数据库,总大小为 928 GB。我不确定是否正在使用列存储,或者我如何检查它。这是一个供应商应用程序。
现在目标内存 = 144,384,008,总计 = 144,378,261。
该实例自美国东部时间昨晚 2019-05-01 22:20:21.097 以来一直在运行。我们有一些基础设施维护需要停止实例。但是,我注意到很长一段时间以来,总/目标始终为 144,而最大值始终设置为 141。周一至周五主要工作时间的 PLE 平均约为 0.5 到 1 小时,有时会跳至 2 小时.
sql-server-2012 ×10
sql-server ×9
auto-growth ×1
blob ×1
memory ×1
performance ×1
powershell ×1
relations ×1
subquery ×1
t-sql ×1