代码之家  ›  专栏  ›  技术社区  ›  Omar Kooheji

数据库:“文本”字段的效率是否低于“varchar”?

  •  9
  • Omar Kooheji  · 技术社区  · 16 年前

    在SQL数据库中使用文本是否比使用varchar效率低?

    如果不是,为什么不总是使用文本?

    我在这里不是针对一个特定的数据库,但oracle可能是最相关的,尽管我目前正在MySQL上进行测试,作为概念验证的一部分。

    4 回复  |  直到 16 年前
        1
  •  4
  •   Galwegian    16 年前

    here

    将显示ntext、text和image数据类型 Microsoft SQL Server。避免使用 这些数据类型正在进行新的开发 工作,并计划修改应用程序 目前正在使用它们的。使用 nvarchar(最大值)、varchar(最大值)和

    当你使用 varchar(max) 在文本上,您可以在 WHERE 子句,因为它们的工作原理与较小的对应项相同, varchar,nvarchar and varbinary . 下面是一个小列表,列出了应该使用的内容,而不是应该使用的内容:

    • 使用varchar(max)代替文本
    • 使用nvarchar(max)而不是ntext
        2
  •  2
  •   Milen A. Radev    16 年前

    PostgreSQL documentation says :

    提示:这三种类型之间没有性能差异,除了在使用空白填充类型时增加存储大小,以及在存储到长度受限制的列时检查长度的几个额外周期。虽然字符(n)在其他一些数据库系统中具有性能优势,但在PostgreSQL中没有这样的优势。在大多数情况下,应改为使用文本或字符。

        3
  •  1
  •   Matthew Scharley    16 年前

    简单的回答是:是的,它们的效率较低。

    更长、更复杂的答案是:

    是的,它们可能效率较低。这取决于您使用的DBMS和表的大小等。文本字段的宽度是可变的,因此DBMS在试图查找记录时必须做更多的工作。这对性能的影响程度与DBMS的总体效率、存储的表行数据量以及是否优化固定长度的表成正比。

    我知道MySQL处理固定长度表行的速度更快,但您必须告诉它,可以首先将该表视为固定长度表。我真的没有任何与其他数据库管理系统的实际经验,能够联系实际的数字。但是在有大量(读取一百万或更多)记录的表上,它可以产生显著的差异。不过,较小的表格几乎没有实际的区别。

        4
  •  1
  •   Jon Skeet    16 年前

    您需要具体说明您正在谈论的数据库。我相信至少在某些数据库中,文本作为CLOB存储,与表本身(仅包含引用)分开。这会导致表变小(良好),但会进行额外的查找,并且在获取时可能会缓存未命中(不良)。

    可能也有索引和查询的含义,但这取决于您使用的特定RDBMS。