请帮助我了解有关数据库的一些信息。
通常(=在默认配置中,没有特殊调整),考虑到行/块大小是恒定的,数据库(=oracle/mssql)如何存储可变长度字符串(=VARCHAR2)?我假设他们在表行之外存储指向其他数据块的指针 - 是否正确?
此外,字符串索引是如何工作的——使用字母顺序进行键比较的 B-Tree,或者像前缀树这样更智能的东西?
谢谢!
数据库使用的索引机制完全依赖于数据库。如果您有关于数据库的具体问题,那么您应该查阅数据库的文档。我希望大多数索引都是 B 树,但这只是一个猜测。
关于存储可变长度字符串的问题也取决于数据库引擎。通常,这些是长度编码的,因此前两个字节具有字符串的长度,后跟字符。但是,SQL 中没有任何东西可以阻止其他机制,例如空字节编码(如在 C 中所做的那样)。可能有一些数据库以这种方式存储它们。
然而,这是一个近似值。MSSQL 中的长字符串存储在与记录中的固定长度字段不同的数据页上。当长字符串超过页面大小时,事情会复杂得多,因为字符串必须适合页面。
支持文本检索功能的数据库具有完全不同的字符串索引机制——通常是倒排索引。
如果您正在寻找解决问题的最佳方法,那么您应该在另一个问题中描述该问题。如果您正在寻找有关数据库的详细信息,那么 Google、数据库文档和 Wikipedia 是您最好的朋友。