数据库如何存储和索引字符串?

时间:2012-08-05 05:08:56

标签: database indexing

请帮助我理解有关数据库的信息。

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

此外,字符串索引如何工作 - 使用字母顺序进行密钥比较的B-Tree,或者像前缀树更聪明的东西?

谢谢!

1 个答案:

答案 0 :(得分:3)

数据库使用的索引机制完全取决于数据库。如果您对数据库有特定问题,那么您应该查阅数据库的文档。我希望大多数索引都是B-Trees,但这只是猜测。

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

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

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

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