相关疑难解决方法(0)

数据库索引如何工作?

鉴于索引在数据集大小增加时非常重要,有人可以解释索引在数据库无关的级别上的工作原理吗?

有关索引字段的查询的信息,请查看如何索引数据库列.

sql database indexing performance database-indexes

2335
推荐指数
8
解决办法
82万
查看次数

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

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

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

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

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

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

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

270
推荐指数
10
解决办法
27万
查看次数

群集与非群集

我对SQL(Server 2008)的较低级别知识是有限的,现在由我们的DBA挑战.让我解释一下(我已经提到了明显的陈述,希望我是对的,但如果你看错了,请告诉我)情景:

我们有一张桌子可以为人们提供"法院命令".当我创建表(Name:CourtOrder)时,我创建了它:

CREATE TABLE dbo.CourtOrder
(
  CourtOrderID INT NOT NULL IDENTITY(1,1), (Primary Key)
  PersonId INT NOT NULL,
  + around 20 other fields of different types.
)
Run Code Online (Sandbox Code Playgroud)

然后,我将非聚集索引应用于主键(以提高效率).我的理由是它是一个唯一的字段(主键),并且应该像我们经常那样被索引,主要用于选择目的Select from table where primary key = ...

然后我在PersonId上应用了CLUSTERED索引.原因是在物理上对某个人进行分组,因为绝大多数工作都是为了获得一个人的订单.所以,select from mytable where personId = ...

我现在已被拉上了这个.有人告诉我,我们应该将聚簇索引放在主键上,将正常索引放在personId上.这对我来说似乎很奇怪.首先,为什么要在特殊列上放置聚簇索引?什么是聚类?当然这是浪费聚集索引?我相信一个普通的索引会用在一个独特的列上.此外,聚类索引意味着我们不能聚集不同的列(每个表一个,对吧?).

我被告知我犯了一个错误的原因是他们认为在PersonId上放置聚集索引会使插入变慢.对于选择速度增加5%,我们将在插入和更新时降低95%的速度.这是正确有效的吗?

他们说因为我们聚集了personId,所以当我们插入或更改PersonId时,SQL Server必须重新排列数据.

那么我问过,为什么SQL会有一个CLUSTERED INDEX的概念,如果它这么慢?它和他们说的那么慢吗?我应该如何设置索引以获得最佳性能?我以为SELECT比INSERT更多......但他们说我们在INSERTS上遇到了锁定问题......

希望可以有人帮帮我.

sql indexing performance sql-server-2008

96
推荐指数
3
解决办法
10万
查看次数