Questions tagged «database-internals»

有关数据库引擎内部工作的技术问题。

2
不是索引的列是否与索引一起在磁盘上排序?
在MySQL,MyISAM和InnoDB中,不是索引的列是否与索引一起在磁盘上排序? 我开始写一个错误的想法: 我认为可能不会,因为它们没有索引。如果将它们排序,则意味着它们是索引。 这是不正确的,因为每个索引列均按其自身内容的顺序排序,但是我要询问的是每一行(或仅某些列)及其相应索引的排序。 解释一下,我说:这对于使选择行的范围(按索引并排在一起)的速度更快很有用。例如,如果我想select * where id >1000 and id<2000(MySQL语法中可能有错误,我不太了解),那么可以快速从磁盘读取id列本身,因为它的1000到2000的单元可能一起位于物理磁盘上。但是可以将与id 1000到2000对应的其他列内容写入物理磁盘上的不同位置。如果还对它们进行了排序,则读取速度会更快。我认为,也许MySQL会自动对物理磁盘上的该列进行排序,以实现此类操作。 它们是否在其他类型的数据库(PostgreSQL等)中排序? 12月27日:从这两个答案中可以看到,在存在聚集索引/主键的情况下,简单行本身并未在物理磁盘上排序(正如我认为的那样/可能),甚至聚集索引也是没有排序,如果它是b树,我已经阅读了有关b树的信息,并且据我了解,它的节点停留在磁盘上的随机位置。

1
有关SQL Server中的SGAM&GAM和IAM&PFS的几个问题
对于SQL Server的内部结构有几个问题。 假设我们在数据库中有一个表。 SGAM和GAM页面在单个GAM间隔(〜4GB)内跟踪共享和统一的扩展区,并帮助我们在分配页面/扩展区时找到合适的扩展区类型(最初从混合扩展区中分配前8页,而这些页面的位置是记录到IAM页,然后再从GAM扩展区(统一扩展区)记录此信息,并将此信息存储在下一个链接的IAM页中。 假设已分配了该表的页面,并且表的大小超过了8页,并且稍后,行被删除,留下了一些可重用的空间。SQL Server如何知道扩展区具有可用空间? 页面具有有关可用空间大小的信息,但是检查每个页面都非常耗时。SGAM和GAM页面中的一些内容不会告诉我们分配了扩展的内容或有一些空闲页面(整个页面都是免费的,而不是部分的)。 文件标题,SGAM,GAM和IAM页面位于文件的第一页中。实际上是什么数据结构指向它们?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.