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

Yon*_*oit 4 database indexing

请帮助我了解有关数据库的知识。

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

另外,字符串索引是如何工作的-使用字母顺序进行键比较的B树或比前缀树更聪明的东西?

谢谢!

Gor*_*off 5

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

有关存储可变长度字符串的问题还取决于数据库引擎。通常,它们是长度编码的,因此前两个字节具有字符串的长度,后跟字符。但是,SQL中没有什么可以阻止其他机制,例如空字节编码(在C语言中完成)。可能有一些数据库以这种方式存储它们。

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

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

如果您正在寻找解决问题的最佳方法,则应在另一个问题中描述问题。如果您正在寻找有关数据库的详细信息,那么Google,数据库文档和Wikipedia是您最好的朋友。