我对DB的了解有限,并且只使用DB作为应用程序员.我想知道Clustered和Non clustered indexes.我用谷歌搜索,发现的是:
聚簇索引是一种特殊类型的索引,它重新排序表中记录的物理存储方式.因此,表只能有一个聚簇索引.聚簇索引的叶节点包含数据页.非聚簇索引是一种特殊类型的索引,其中索引的逻辑顺序与磁盘上行的物理存储顺序不匹配.非聚簇索引的叶节点不包含数据页.相反,叶节点包含索引行.
我在SO中发现的是聚簇索引和非聚簇索引之间有什么区别?.
有人可以用简单的英语解释这个吗?
sql-server indexing performance clustered-index non-clustered-index
a clustered和a 之间有什么区别non-clustered index?
我需要添加适当的index表格,需要一些帮助.
我很困惑,需要澄清几点:
我应该为non-int列使用索引吗?为什么/为什么不呢
我已经读了很多关于clustered和non-clustered指数但我仍然不能确定何时使用一个比其他.一个很好的例子可以帮助我和许多其他开发人员.
我知道我不应该为经常更新的列或表使用索引.我还应该注意什么呢?在进入测试阶段之前我怎么知道这一切都很好?
sql-server indexing database-design clustered-index non-clustered-index
我知道集群索引和非集群索引之间的主要区别,并了解它们的实际工作方式.我理解群集和非群集索引如何提高读取性能.但有一件事我不确定是什么原因让我选择一个而不是另一个.
例如:如果一个表没有聚集索引,那么应该创建一个非聚集索引并且有什么好处呢?
sql-server indexing clustered-index query-tuning non-clustered-index
我有一个包含数百个表的非常大的数据库,经过许多产品升级后,我确信其中一半不再使用了.如何判断是否正在从中选择一个表?我不能只使用Profiler - 我不仅要观看超过几天,而且还有数千个存储过程,并且探查器不会将SP调用转换为表访问调用.
我唯一能想到的是在感兴趣的表上创建聚簇索引,然后监视sys.dm_db_index_usage_stats聚类索引是否有任何搜索或扫描,这意味着表中的数据已加载.但是,在每个表上添加聚簇索引是一个坏主意(由于许多原因),因为这是不可行的.
我还有其他选择吗?我一直想要一个像"SELECT触发器"这样的功能,但是可能还有其他原因导致SQL Server没有这个功能.
解:
谢谢,Remus,指出我正确的方向.使用这些列,我创建了以下SELECT,它完全符合我的要求.
WITH LastActivity (ObjectID, LastAction) AS
(
SELECT object_id AS TableName,
last_user_seek as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
last_user_scan as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
last_user_lookup as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
)
SELECT OBJECT_NAME(so.object_id) AS TableName,
MAX(la.LastAction) as LastSelect
FROM sys.objects so
LEFT
JOIN LastActivity la
on so.object_id = la.ObjectID
WHERE …Run Code Online (Sandbox Code Playgroud) 我正在使用psql访问postgres数据库.查看表的元数据时,有没有办法查看表的索引是否为聚簇索引?
我听说表的PRIMARY KEY自动与聚簇索引相关联,是真的吗?
我在SQL server 2008中创建一个数据库,
CREATE TABLE Users
(
U_Id INT NOT NULL
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(200)
Password VARCHAR(50)
)
Run Code Online (Sandbox Code Playgroud)
我想让U_Id成为主键.我想问一下有什么区别
CONSTRAINT pk_UserID PRIMARY KEY (U_Id)
Run Code Online (Sandbox Code Playgroud)
这个
CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)
Run Code Online (Sandbox Code Playgroud)
还有这个
CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)
Run Code Online (Sandbox Code Playgroud)
什么时候使用?
我读了一些文章,但我还不清楚.有人可以给我一个快速解释吗?
我正在研究一个通常使用GUID作为主键的数据库.
默认情况下,SQL Server在主键列上放置聚簇索引.我理解这对于GUID列来说是一个愚蠢的想法,并且非聚集索引更好.
你怎么想 - 我应该摆脱所有聚集索引并用非聚集索引替换它们吗?
为什么SQL的性能调优器不会提供此建议?
兼职不情愿的DBA在这里.我想将现有的主键索引从群集更改为非群集.而语法正在逃避我.
这就是它现在的编写方式.
ALTER TABLE [dbo].[Config] WITH NOCHECK ADD
CONSTRAINT [PK_Config] PRIMARY KEY CLUSTERED
(
[ConfigID]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我没有在在线文档中看到ALTER CONSTRAINT语句.
clustered-index ×10
sql-server ×6
indexing ×4
database ×2
sql ×2
alter ×1
guid ×1
performance ×1
postgresql ×1
primary-key ×1
query-tuning ×1
t-sql ×1