我必须使用数据库来进行报告数据库非常大:416 055 104行每行非常轻,但只是布尔值和int id.
每行由3列标识,但令我惊讶的是,它上面没有主键.仅具有唯一约束的聚簇索引.
所以知道,我有两个问题.
关于问题2
创建新主键还会创建要与之关联的非聚集索引(已存在已存在的聚簇索引).
这不是我想要的.我想保留相同的索引,但也使它成为主键.
好的,我需要再次拼出这个.我已经在线阅读了这些文章,但我还没有找到明确的答案.
在SQL Server 2008中,我有一个"核心"表,其中包含大约50,000条记录和大量读取活动,在所有查询中以相同的方式使用.此数据每月更新一次,每秒读取数百次.
数据在字段上具有聚簇索引,因为它们经常被访问.假设聚集索引是:
集群指数
Field1 int
Field2 int
Field3 int
Field4 int
Field5 int
Run Code Online (Sandbox Code Playgroud)
现在,没有比这更多的数据,所以将额外的几列放入"包含的列"是有意义的,但SQL Server不允许在聚集索引上包含列.
因此,我们有第二个索引,其字段与Clustered Index基本相同,其他列为"Included Columns".但是,从我读过的内容来看,我认为这可能是多余的?
覆盖索引(非群集)
Field1 int
Field2 int
Field3 int
Field4 int
Field5 int
Run Code Online (Sandbox Code Playgroud)
包括栏目
Field6 varchar(96)
Field7 varchar(96)
Run Code Online (Sandbox Code Playgroud)
非聚集索引ALREADY是否具有其中定义的聚簇索引的列?
如果是这样,那么如何使用NO列创建第二个索引(除了已经在聚簇索引中的内容)?换句话说,我想说"这个索引与聚集索引完全相同......带有几个包含的列".
或者,将所有列放入聚集索引(包括不识别记录的两个列)会更好吗?varchar列确实更频繁地更新(每天几次而不是每月一次),所以我希望将它们保留在聚集索引之外,但我认为它们足够深,它们不会影响索引树足以在发生更改时导致任何重新平衡.
那么,是否有一种有效的方法来设置这些索引,以便该表的所有列都可以通过索引获得而无需返回到表中?
我有一个大表(SQL Server 2008),有近300万行.它目前在其主键上有一个聚簇索引,在其外键上有一个非聚簇索引.
几乎所有表上的查询都是基于外键的读取.
谢谢
我们正在寻找一些建议,围绕Solr系统地重新索引一个不断增长的文档集(现在有数千万,一年中有数亿),而不会使当前运行的索引失效.需要在定期基础上重新编制索引,因为:
当前索引会收到非常频繁的更新和添加,需要在几分钟内进行搜索.因此,在批量脱机中重新索引语料库的方法实际上不起作用,因为批次完成时,新文档将可用.
我们目前正在研究的方法是:
我们很感激,如果人们可以确认或者在这些方法中的任何一个或所有方法中找到漏洞.一个比另一个更合适吗?还是我们完全脱了?先感谢您.
我有一个非常简单的桌子,为人们存储标题("先生","太太"等).这是我正在做的简要版本(在这个例子中使用临时表,但结果是相同的):
create table #titles (
t_id tinyint not null identity(1, 1),
title varchar(20) not null,
constraint pk_titles primary key clustered (t_id),
constraint ux_titles unique nonclustered (title)
)
go
insert #titles values ('Mr')
insert #titles values ('Mrs')
insert #titles values ('Miss')
select * from #titles
drop table #titles
Run Code Online (Sandbox Code Playgroud)
请注意,表的主键是聚类的(显式,为了示例),并且标题列有一个非聚集唯一性约束.
以下是select操作的结果:
t_id title
---- --------------------
3 Miss
1 Mr
2 Mrs
Run Code Online (Sandbox Code Playgroud)
查看执行计划,SQL在群集主键上使用非聚集索引.我猜这解释了为什么结果按此顺序返回,但我不知道为什么它会这样做.
有任何想法吗?更重要的是,任何阻止这种行为的方法?我希望按照插入的顺序返回行.
谢谢!
sql-server clustered-index sql-execution-plan non-clustered-index
我们一直在经历SQL超时,并确定该瓶颈是审计表 - 我们系统中的所有表都包含插入,更新和删除触发器,这会导致新的审计记录.
这意味着审计表是系统中最大且最繁忙的表.然而,数据只会进入,并且永远不会出现(在此系统下),因此不需要select执行任何性能.
select top 10最近运行一个返回记录而不是"第一个"记录. order by当然可以工作,但是我希望选择顶部应该根据它们在光盘上的顺序返回行 - 我希望它会返回最低的PK值.
有人建议我们删除聚集索引,实际上也是主键(唯一约束).正如我之前提到的,select在这个系统中没有必要从这个表中获取.
聚集索引在表上创建什么样的性能?拥有无索引,非聚集,无密钥表的(非选择)分支是什么?还有其他建议吗?
编辑
我们的审计涉及CLR功能,我现在使用和不使用PK,索引,FK等进行基准测试,以确定CLR功能和约束的相对成本.
经过调查,表现不佳与insert陈述无关,而是与编制审计的CLR功能无关.删除CLR后使用直接TSQL proc,性能提高了20倍.
在测试期间,我还确定聚簇索引和标识列对插入时间的影响很小或没有差别,至少相对于发生的任何其他处理而言.
// updating 10k rows in a table with trigger
// using CLR function
PK (identity, clustered)- ~78000ms
No PK, no index - ~81000ms
// using straight TSQL
PK (identity, clustered) - 2174ms
No PK, no index - 2102ms
Run Code Online (Sandbox Code Playgroud) primary-key clustered-index sql-server-2008 database-performance
甲聚簇索引在索引的叶级存储实际数据的行.回到上面的示例,这将意味着与主键值123相关联的整个数据行将存储在该叶节点中.

问题 - 如果主键不存在,我将Name列设置为聚簇索引.在这种情况下,上述陈述会变得矛盾吗?
我们正在使用MS SQL Server 2005.
嗨,我正在数据库表上执行UPDATE语句.让我们说这个表有下一个列:
int Id PK
int Column1
int Column2
Run Code Online (Sandbox Code Playgroud)
它还有几个索引:
Unique Clustered (Id)
Non-Unique Non-Clustered (Column1)
Non-Unique Non-Clustered (Column2)
Run Code Online (Sandbox Code Playgroud)
我做下一步操作:
UPDATE [dbo].[Table]
SET Column1 = @Value1
WHERE Column1 = @Param1
AND Column2 = @Param2
Run Code Online (Sandbox Code Playgroud)
之后的实际执行计划如下所示:
其中86%的时间用于更新聚簇索引,其中不包括我刚刚更改的列.
禁用Web应用程序时,此操作应运行数十万次,这意味着它非常关键.
那么,有没有人知道为什么事情会这样发生,是否可以某种方式修复?这个问题有意义吗?如果需要,我准备提供更多信息.
我发现了这个问题,但它似乎没有回答这个问题......
如何编写IF T-SQL语句来说:
IF NOT ([TableName] has a CLUSTERED PK)
ALTER TABLE to add the CLUSTERED PK
Run Code Online (Sandbox Code Playgroud) 我正在学习一个INDEX()在CREATE TABLE语句中使用的教程,但没有解释它是集群还是非集群.我的问题是:INDEX()在CREATE TABLE语句中使用会导致聚簇索引还是非聚簇索引?
例如:
CREATE TABLE test (a varchar(30), b varchar(30), index(a));
/* Is column A a clustered or non-clustered index? */
Run Code Online (Sandbox Code Playgroud)
还想知道如何做相反的事情:如果示例导致非聚集索引,您如何编写聚簇索引,反之亦然?
clustered-index ×10
indexing ×4
sql ×4
sql-server ×4
primary-key ×3
t-sql ×2
alter ×1
bigdata ×1
mysql ×1
solr ×1