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

Database 数据库如何存储和索引字符串?,database,indexing,Database,Indexing,请帮我了解一下星展银行 通常(=在默认配置中,没有特殊调整),考虑到行/块大小是恒定的,数据库(=oracle/mssql)如何存储可变长度字符串(=VARCHAR2)?我假设它们在表行之外存储了指向其他数据块的指针-正确吗 另外,字符串索引是如何工作的——使用字母顺序进行键比较的B树,还是像前缀树这样更智能的东西 谢谢 数据库使用的索引机制完全取决于数据库。如果您有关于数据库的特定问题,那么您应该查阅数据库的文档。我希望大多数索引都是B-树,但这只是一个猜测 存储可变长度字符串的问题也取决于数

请帮我了解一下星展银行

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

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


谢谢

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

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

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

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

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