相关疑难解决方法(0)

群集和非群集索引实际上意味着什么?

我对DB的了解有限,并且只使用DB作为应用程序员.我想知道ClusteredNon clustered indexes.我用谷歌搜索,发现的是:

聚簇索引是一种特殊类型的索引,它重新排序表中记录的物理存储方式.因此,表只能有一个聚簇索引.聚簇索引的叶节点包含数据页.非聚簇索引是一种特殊类型的索引,其中索引的逻辑顺序与磁盘上行的物理存储顺序不匹配.非聚簇索引的叶节点不包含数据页.相反,叶节点包含索引行.

我在SO中发现的是聚簇索引和非聚簇索引之间有什么区别?.

有人可以用简单的英语解释这个吗?

sql-server indexing performance clustered-index non-clustered-index

1041
推荐指数
10
解决办法
74万
查看次数

在SQL中基于群集和非群集索引优化查询?

我最近一直在阅读如何clustered indexnon-clustered index有效的方法.我用简单的术语理解(如果错误,请纠正我):

支持clusterednon-clustered index存在的数据结构B-Tree

Clustered Index:根据索引列(或键)对数据进行物理排序.你只能有一个clustered Index每个table.如果没有index表创建过程中指定,SQL服务器将自动创建clustered Indexprimary key column.

Q1:由于数据是根据索引进行物理排序的,因此这里不需要额外的空间.它是否正确?那么当我删除我创建的索引时会发生什么?

Non-clustered Index:在non-clustered indexes,leaf-node树的包含列值和指向数据库中实际行的指针(行定位器).这里存在将non-clustered index table物理存储在磁盘上所需的额外空间.但是,一个不受数量的限制non-clustered Indexes.

Q2:这是否意味着对非聚集索引列的查询不会导致排序数据?

问题3:此处有一个额外的查找,用于使用叶节点处的指针定位实际的行数据.与聚簇索引相比,这会有多大的性能差异?

锻炼; Tibial:

考虑一个Employee表:

CREATE TABLE Employee
(
PersonID int PRIMARY KEY,
Name varchar(255),
age int,
salary int
); 
Run Code Online (Sandbox Code Playgroud)

现在我创建了一个employee表(创建了employee上的默认聚簇索引).

此表上的两个常见查询仅发生在年龄和工资列上.为简单起见,我们假设表不经常更新

例如:

select * from employee where age …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing clustered-index non-clustered-index

3
推荐指数
1
解决办法
4531
查看次数