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

Databases: Are "TEXT" fields less efficient than "varchar"?

提问人:Omar Kooheji 提问时间:10/16/2008 更新时间:10/16/2008 访问量:906

问:

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

如果是这样,为什么?

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

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

SQL 变量 性能

评论

0赞 Till 10/16/2008
我认为已经说过了,在MySQL的情况下,varchar列也有“INDEX READ”,文本列总是有“ROW READ”。这使得 TEXT 列上的 LIKE 查询速度变慢。

答:

4赞 Galwegian 10/16/2008 #1

来自 Microsoft 这里

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

当您使用“文本”时,您可以在子句中使用它,因为它们的工作方式与较小的对应项相同。下面是应该使用的内容的一小部分,而不是要使用的内容:varchar(max)WHEREvarchar,nvarchar and varbinary

  • 使用 varchar(max) 代替文本
  • 使用 nvarchar(max) 而不是 ntext
  • 使用 varbinary(max) 代替 image
1赞 Matthew Scharley 10/16/2008 #2

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

更长、更复杂的答案是:

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

我知道MySQL在固定长度的表行中工作得更快,但你必须告诉它,该表首先可以被视为固定长度的表。我真的没有任何使用其他DBMS的实践经验,无法将实际数字联系起来。但是在具有大量(读取一百万或更多)记录的表上,它可能会产生重大影响。不过,较小的桌子几乎没有实际区别。

评论

0赞 dan04 6/26/2010
那是 vs.OP 要求 vs.TEXTCHARTEXTVARCHAR
1赞 Jon Skeet 10/16/2008 #3

你需要具体说明你说的是哪个数据库。我相信至少在某些数据库中,TEXT 存储为独立于表本身的 CLOB(仅包含引用)。这导致表变小(好),但需要额外的查找,并且在获取时可能未命中缓存(坏)。

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

2赞 Milen A. Radev 10/16/2008 #4

PostgreSQL文档说

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