【问题标题】:Databases: Are "TEXT" fields less efficient than "varchar"?数据库:“TEXT”字段的效率是否低于“varchar”?
【发布时间】:2010-09-17 11:55:30
【问题描述】:

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

如果是,为什么?

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

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

【问题讨论】:

  • 我想大家都说过,在 MySQL 的情况下,varchar 列也有“INDEX READ”,而 text 列总是有“ROW READ”。这会使 TEXT 列上的 LIKE 查询变慢。

标签: sql variables performance


【解决方案1】:

来自微软here

ntext、text 和 image 数据类型将 在未来的版本中被删除 微软 SQL 服务器。避免使用 新开发的这些数据类型 工作,并计划修改应用程序 目前使用它们。采用 nvarchar(max)、varchar(max) 和 varbinary(max) 代替。

当您在文本上使用varchar(max) 时,您可以在WHERE 子句中使用它,因为它们与较小的对应物varchar,nvarchar and varbinary 的工作方式相同。下面是应该使用什么而不是应该使用什么的小列表:

  • 使用 varchar(max) 代替文本
  • 使用 nvarchar(max) 代替 ntext
  • 使用 varbinary(max) 代替图像

【讨论】:

    【解决方案2】:

    PostgreSQL documentation says:

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

    【讨论】:

      【解决方案3】:

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

      更长、更复杂的答案是:

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

      我知道 MySQL 在固定长度的表行上工作得更快,但你必须先告诉它该表能够被视为固定长度的表。我真的没有任何与其他 DBMS 相关的实际经验来关联实际数字。但是在有很多(读取一百万或更多)记录的表上,它可以产生显着的差异。不过,较小的表几乎没有实际差异。

      【讨论】:

      • 那是 TEXTCHAR。 OP 要求 TEXTVARCHAR
      【解决方案4】:

      您需要具体说明您所谈论的数据库。我相信至少在某些数据库中,TEXT 存储为与表本身分开的 CLOB(仅包含一个引用)。这会导致表更小(好),但在获取时需要额外的查找和缓存未命中(坏)。

      也可能涉及索引和查询,但同样取决于您使用的特定 RDBMS。

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 1970-01-01
        • 2011-03-30
        • 2012-09-07
        • 2012-03-25
        • 1970-01-01
        • 2018-04-04
        • 2019-09-22
        相关资源
        最近更新 更多