【问题标题】:How do databases store and index strings?数据库如何存储和索引字符串?
【发布时间】:2012-08-02 14:07:25
【问题描述】:

请帮助我了解一些关于 DB 的知识。

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

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

谢谢!

【问题讨论】:

    标签: database indexing


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多