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

时间:2008-10-16 09:06:11

标签: sql variables performance

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

若是,为什么?

如果没有,为什么你不会一直使用TEXT?

我不是在这里定位一个特定的数据库,但是oracle可能是最相关的,尽管我正在测试MySQL暂时作为概念证明的一部分。

4 个答案:

答案 0 :(得分:4)

来自Microsoft here

  

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

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

  • 使用varchar(max)代替text
  • 使用nvarchar(max)代替ntext
  • 使用varbinary(max)代替image

答案 1 :(得分:2)

PostgreSQL documentation says

  

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

答案 2 :(得分:1)

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

更长,更复杂的答案是:

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

我知道MySQL使用固定长度的表行可以更快地工作,但你必须告诉它,该表能够首先被视为一个固定长度的表。我对其他DBMS没有任何实际经验可以将实际数字联系起来。但是对于有大量(读取一百万或更多)记录的表格,它可以产生显着的差异。较小的表虽然没有实际的差别。

答案 3 :(得分:1)

您需要具体说明您正在谈论的数据库。我相信至少有一些数据库,TEXT存储为一个独立于表本身的CLOB(它只包含一个引用)。这导致表格更小(更好)但是额外查找并且在获取时可能是缓存未命中(错误)。

也可能存在索引和查询含义,但它又取决于您正在使用的特定RDBMS。