9

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

如果是,为什么?

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

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

4

4 回答 4

4

从微软这里

在 Microsoft SQL Server 的未来版本中,将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

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

  • 使用 varchar(max) 代替文本
  • 使用 nvarchar(max) 代替 ntext
  • 使用 varbinary(max) 代替图像
于 2008-10-16T09:08:59.450 回答
2

PostgreSQL 文档说

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

于 2008-10-16T12:06:07.627 回答
1

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

更长,更复杂的答案是:

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

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

于 2008-10-16T09:12:16.417 回答
1

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

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

于 2008-10-16T09:12:17.023 回答