2012-08-05 35 views
2

请帮我理解关于数据库的一些事情。数据库如何存储和索引字符串?

考虑到行/块大小是恒定的,通常(=在默认配置中,没有特别的调整),数据库(= oracle/mssql)如何存储可变长度字符串(= VARCHAR2)?我假设他们在表格行之外存储了一个指向其他数据块的指针 - 是否正确?

此外,字符串索引是如何工作的 - 使用字母顺序进行键比较的B-Tree,还是像前缀树那样更智能的东西?

谢谢!

回答

2

数据库使用的索引机制完全取决于数据库。如果您有关于数据库的具体问题,那么您应该查阅数据库的文档。我希望大多数索引是B树,但这只是一个猜测。

关于存储变长字符串的问题也取决于数据库引擎。一般来说,这些是长度编码的,所以前两个字节的长度是字符串后面跟着字符。但是,SQL中没有任何内容阻止其他机制,如空字节编码(如C所示)。可能有一些数据库以这种方式存储它们。

但是,这是一个近似值。 MSSQL中的长字符串存储在记录中固定长度字段的单独数据页上。当长字符串超过页面大小时,事情就复杂得多,因为字符串必须适合页面。

支持文本检索功能的数据库具有完全不同的索引字符串机制 - 通常是倒排索引。

如果您正在寻找解决问题的最佳方法,那么您应该在另一个问题中描述问题。如果你正在寻找关于数据库的细节,那么谷歌,数据库文档和维基百科是你最好的朋友。

相关问题