我们有一个包含2.3B行的表。我们希望将列从NULL更改为NULL。列包含在一个索引中(不是聚集索引或PK索引)。数据类型没有改变(它是一个INT)。仅仅是虚无性。声明如下:
Alter Table dbo.Workflow Alter Column LineId Int NULL
操作在停止之前需要超过10次(我们甚至还没有让它运行到完成,因为它是一个阻塞操作,花费的时间太长)。我们可能会将表复制到dev服务器,测试实际需要多长时间。但是,我很好奇,当从NULL转换为NULL时,是否有人知道Server在幕后做什么呢?此外,受影响的索引需要重建吗?生成的查询计划并不表示正在发生什么。
所讨论
关于MS SQL-Server,表的主键列是否包含在该表的常规非唯一索引中?
如果不是,将其包含在索引中是否有意义?
create table dbo.People (
PK_PersonId int not null,
PersonName nvarchar (100),
Bunch of Other Fields
,
因此,在PersonName上创建索引时,添加主键列PK_PersonId是否有意义?
我刚开始索引维护。我看到我们的大多数索引都是使用create index和drop_existing = on修改的。例如:
create nonclustered index ixn_SomeTable__SomeIndexName_ic1
on dbo.SomeTable ( Column1 )
include ( Column2, IncludeThisNewColumn3 )
with ( sort_in_tempdb = on, drop_existing = on, online = on, fillf
我们从SQL Server加载大量数据(约2亿行,大小约10 in )。服务器为SQL server 2019,运行在Linux机器上,内存充足,网络速度非常快。数据稍后由Spark应用程序处理,但这并不重要,我们使用测试应用程序得到相同的结果。
我们要查询的表非常宽,大约有100列,查询根据时间范围选择其中的一些列。而且,因为我们从Spark运行它,所以它分布在executors中,并添加了额外的时间过滤器。
类似于:
select *
from
(select time, col1, col5, col38
from table
where time &
假设我们必须为堆栈溢出问题定义最佳索引。但是,让我们不要使用实际的Posts表的模式,让我们只包括那些实际相关的列:
create table Posts (
Id int not null
identity,
PostTypeId tinyint not null,
LastActivityDate datetime not null
default getdate(),
Title nvarchar(500) null, -- answers don't have titles
Body nvarchar(ma
我是SQLServer的新手,有一件事真的困扰着我。希望你们中有人能给我解释一下发生了什么。
当我在索引过程中运行活动监视器时,我意识到包括弱实体在内的一些查询花费的时间比预期的要长,甚至更奇怪的是,SQLServer建议在表单的弱实体上创建索引
CREATE NONCLUSTERED INDEX [<INDEXNAME>]
ON [dbo].[<TABLE>] ([<ID1>])
INCLUDE ([<ID2>])
GO
这样做(实际上我索引了两个列,但我认为结果几乎相同)确实提高了查询速度(至少从我在活动监视器中可以看到的情况来看是这样)。
由于I/O高、嵌套循环联接和阻止插入的键查找,我不得不创建包含列的索引:
SELECT * FROM Table WHERE (Column1 = 'ED69K')
我在Column1上创建了一个索引,为选择列表中的其余列创建了20个包含列。
SELECT TOP (50000) * FROM Table WHERE datetime = 6/10/2021
在Datetime上为select列表中的其余列创建包含20个列的索引。
上述两个索引减少了嵌套循环联接和键查找,但同时也增加了数据库空间。
现在,由于索引都是相同的,只更改键列,那么插入现在会花费两倍的时间吗?
我们希望将来自其他供应商的数据加载到SQL Server 2012上现有应用程序数据库的表中。表结构如下图所示,表中预计有4亿行。数据加载要到3周后才会出现,但在查询表的性能方面有一个问题。
SQL Server具有64 RAM。
在此表上只需要SELECT查询。数据是静态的,预计不会更改,也不会向表中写入数据。SELECT查询总是期望返回1个匹配的行。下面是SELECT查询的外观:
Select "Data Column 9"
from Table
where "Data Column 1" = AB
and "Data Column 2
我们一直在查询和处理系统中不断增长的事件表,目前还没有具体的索引。然而,我们已经注意到性能的下降,我们想知道我们能做些什么来改善这一点。
我创建了几个测试表来测试不同的索引:
SELECT TOP 1000000 * INTO IndexTest1
FROM Events
SELECT TOP 1000000 * INTO IndexTest2
FROM Events
SELECT TOP 1000000 * INTO IndexTest3
FROM Events
接下来,我在经常用于查询事件或处理事件的列上添加了不同的聚集索引。大多数情况下,我们使用Timestamp或EventType
在datawarehouse环境中工作( Server 2008),有几个表有大约200万行和20列。每天晚上,桌子都会被丢弃并重新创建。创建索引时,也会生成索引。由于某些原因,这些表上没有聚集索引。但是,有一些唯一的非聚集索引。似乎不合逻辑。有谁知道改变所有这些表有聚集索引的缺点吗?应该会节省一些空间并表现得更好。
有小费吗?
提前谢谢。
请有人简化对列添加唯一约束的解释。创建键索引时,SQL SERVER是否会复制行中的所有信息,并将其添加到索引中,还是仅将应用的唯一约束添加到列中的数据中?
我希望我解释得很清楚。
任何帮助都将不胜感激。
李。
编辑**
好吧,我想我明白了?
CREATE TABLE dbo.test
(
Id int NOT NULL,
Name char(10) NOT NULL UNIQUE
);
INSERT INTO dbo.test (id, name) VALUES (1, 'Lee')
INSERT INTO dbo.test (id, n