标签: clustered-index

两列上的聚簇索引

我有一个多对多的表,让我们说:

PersonJob(personId,jobId)
Run Code Online (Sandbox Code Playgroud)

with clustered index(personId,jobId).

问题是:

如果在SQL中的某个地方,我会进行如下查询:

SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......
Run Code Online (Sandbox Code Playgroud)

是否会利用该聚集索引在PersonJob表中查找具有特定jobId的记录?或者我最好在PersonJob表的jobId列上创建新的非群集非唯一索引?

谢谢帕维尔

sql-server indexing clustered-index

14
推荐指数
1
解决办法
2万
查看次数

SQL Server聚簇索引是否替换RID查找"索引"

当一个表在SQL Server中具有聚簇索引时,是否意味着所有索引查询都将通过聚簇索引?

例如,如果我有一个包含单个非聚集索引的表(索引一列)并通过该列搜索行,它将执行 Index Seek -> RID -> Data row lookup -> Result

但是,如果我在不同的列上添加聚簇索引,则相同的查询将执行以下操作 Index Seek -> Extract clustering key -> Clustered index seek -> Results

这对我来说意味着非聚集索引不再"终止"叶子上的RID,而是使用聚簇索引的聚类键?是对的吗?

sql-server clustered-index

13
推荐指数
1
解决办法
3447
查看次数

更新现有表中的ANSI_NULLS选项

在我们的数据库中有一个用它创建的表ANSI_NULLS OFF.现在我们使用此表创建了一个视图.我们想为此视图添加聚簇索引.

在创建聚簇索引时,它显示的错误就像无法创建索引一样,因为ANSI_NULL对于此特定表是关闭的.

该表包含大量数据.所以我想将此选项更改为ON而不会丢失任何数据.

有没有办法改变表来修改这个选项.请提出你的建议.

sql clustered-index sql-server-2008 ansi-nulls

13
推荐指数
1
解决办法
1万
查看次数

为什么MySQL不能使用部分主键索引?

描述索引扩展使用的MySQL文档,以下表为例,后面是查询:

CREATE TABLE t1 (
    i1 INT NOT NULL DEFAULT 0,
    i2 INT NOT NULL DEFAULT 0,
    d DATE DEFAULT NULL,
    PRIMARY KEY (i1, i2),
    INDEX k_d (d)
) ENGINE = InnoDB;

SELECT COUNT(*) FROM t1 WHERE i1 = 3 AND d = '2000-01-01';
Run Code Online (Sandbox Code Playgroud)

InnoDB内部将转换索引k_d以包含最后的主键.也就是说,实际索引k_d将打开(d, i1, i2),三列.

文档继续解释(强调我的):

在这种情况下,优化器不能使用主键,因为它包含列(i1,i2),查询不引用i2.相反,优化器可以在(d)上使用辅助索引k_d,执行计划取决于是否使用扩展索引.

我对以上陈述感到困惑.首先,它说i1足够使用两列的主键索引(i1, i2).然后,在第二句,它说,该指数k_d(d, i1, i2) 可以使用,尽管只有di1正在使用, …

mysql indexing clustered-index

13
推荐指数
1
解决办法
510
查看次数

Mysql如何创建聚簇索引?

我正在阅读有关聚簇索引如何工作的所有内容,并认为它们对我的应用程序有益.我知道主键是自动聚簇索引,但是如何将聚簇索引添加到非主键列?

即用户帖子的数据存储区.每个帖子都有一个ID,但也有一个用户ID,但由于用户可以多次发帖,因此user-id不是主键.如何将聚集索引添加到用户ID,这是一个好主意?

mysql sql clustered-index

12
推荐指数
2
解决办法
3万
查看次数

如何在SQL Server中选择聚簇索引?

通常,通过设置主键在SQL Server Management Studio中创建聚簇索引,但是我最近关于PK < - >聚簇索引(Microsoft SQL Server 2008主键的含义)的问题表明没有必要设置PK和聚集索引是相等的.

那么我们应该如何选择聚簇索引呢?我们有以下示例:

create table Customers(ID int,...)create table Orders(ID int,CustomerID int)

我们通常会在两个ID列上创建PK/CI,但我想为CustomerID中的Orders创建它.那是最好的选择吗?

sql-server database-design primary-key clustered-index sql-server-2008

11
推荐指数
2
解决办法
8171
查看次数

使用实体框架和SQL Server进行代码优先迁移时如何创建聚簇索引

我有一个MessageModel带有timestamp属性的消息创建时间.我想在这个long属性上创建一个聚簇索引.我希望在进行查询时获得查询加速,以获得比某个时间戳更新的所有消息.创建后,时间戳值永远不会更改.我目前在int Id属性上有一个常规索引.

如何在ASP.NET MVC 4.5中使用Entity Framework代码优先迁移在models属性上添加聚簇索引?

entity-framework clustered-index asp.net-mvc-4 ef-migrations

11
推荐指数
1
解决办法
6544
查看次数

主键是否应始终指定为聚簇索引

我有一个存储员工详细信息的SQLServer表,列ID是GUID类型,而EmployeeNumber列是INT类型.大多数时候,我会在加入和选择条件时处理EmployeeNumber.

我的问题是,在ClusteredIndex为EmployeeNumber时,将PrimaryKey分配给ID列是否合理?

sql sql-server clustered-index

10
推荐指数
2
解决办法
7943
查看次数

SQL Server:ADO.Net GetUpdateCommand确定PK,添加另一个群集唯一索引后失败

我有一个非聚集主键的表:

CREATE TABLE [dbo].[StudentGrade](
    [EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
    [CourseID] [nvarchar](10) NOT NULL,
    [StudentID] [int] NOT NULL,
    [Grade] [decimal](3, 2) NOT NULL,
CONSTRAINT [PK_StudentGrade] PRIMARY KEY NONCLUSTERED ([EnrollmentID] ASC))
Run Code Online (Sandbox Code Playgroud)

select语句是:

select EnrollmentID,Grade from StudentGrade
Run Code Online (Sandbox Code Playgroud)

GetUpdateCommand工作正常,可以识别非群集主键.

添加另一个聚簇唯一索引时(在两列上甚至不是select子句的一部分):

CREATE UNIQUE CLUSTERED INDEX [Badguy] ON [dbo].[StudentGrade] ([CourseID] ASC, [StudentID] ASC)
Run Code Online (Sandbox Code Playgroud)

GetUpdateCommand因此异常而失败:

System.InvalidOperationException: Dynamic SQL generation for the
UpdateCommand is not supported against a SelectCommand that does not return
any key column information.
Run Code Online (Sandbox Code Playgroud)

如果索引不是唯一的或不是群集的,则没有错误.

看起来聚类唯一索引优先于主键来描述元数据.如果有几个关键候选者(pk/unique index),它不会尝试使用查询中包含所有列的候选者.

这是预期的行为吗?除了选择索引列还是明确更新命令之外,还有哪种简单方法可以解决?

出于性能目的,我需要使用此聚簇索引,主键通常不用于查询.

.net c# sql-server ado.net clustered-index

10
推荐指数
1
解决办法
171
查看次数

我该怎么做才能获得聚集索引而不是聚集索引扫描?

我在SQL Server 2005中有一个存储过程,当我运行它并查看它的执行计划时,我注意到它正在进行聚簇索引扫描,这使得它的成本为84%.我已经读过,我必须修改一些东西以获得Clustered Index Seek,但我不知道要修改什么.

我会感激任何帮助.

谢谢,

布赖恩

sql-server-2005 clustered-index

9
推荐指数
2
解决办法
7605
查看次数