您知道数据库引擎获取表中的行与在磁盘预置中使用索引有什么不同吗?他们使用引擎访问磁盘中的表的方式是相同的,当使用和不使用索引时?或者当数据库引擎不使用索引时,对磁盘的访问是顺序的,而当使用索引时,访问是随机的,因此速度更慢?
发布于 2016-05-17 18:42:46
Server存储引擎以同样的方式访问硬盘上的数据。它可以是完全相同的物理文件。这就是为什么尽管这是一种糟糕的做法,但是您可以只有一个物理.mdf文件,并将所有索引、非索引数据放在聚集索引中,堆在同一个物理文件中。当然,如果适当的覆盖索引可以在牺牲磁盘空间和RAM利用率的情况下提高性能,那么性能和磁盘空间的使用将是不同的。
然后,Server的存储引擎使用SGAM、GAM和PFS,它将查找范围的类型(混合与否)、数据写入Server数据库文件中的范围和页面,而不管表上是否有索引(堆或群集)。
它用于获取数据的逻辑方法通常会影响表是堆(未排序)还是具有聚集索引。在堆的情况下,您有一个RID (Row ID),它标识每一行。在聚集索引中,您有索引键,它有效地使用反向b树索引进行遍历。
SQL2005中存储引擎团队的负责人Paul在这里很好地描述了这一切,如果您想深入了解内部的话:存储引擎内部 保罗关于这个主题的MCM视频以一种简单易懂的方式处理内部结构。
你会想要回顾“数据文件内部和维护”,“索引内部”,也许“聚集索引辩论”,如果你觉得它。
祝好运!
https://dba.stackexchange.com/questions/138783
复制相似问题