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

如果是这样为什么?

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

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

有帮助吗?

解决方案

来自微软 这里

NTEXT,文本和图像数据类型将在Microsoft SQL Server的未来版本中删除。避免在新开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。使用nvarchar(Max),Varchar(Max)和Varbinary(Max)。

当你使用 varchar(max) 通过文本,您可以在 WHERE 条款,因为它们的工作原理与较小的对应项相同, varchar,nvarchar and varbinary. 。下面是应该使用什么而不是要使用什么的一个小列表:

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

其他提示

PostgreSQL文档说明

  

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

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

更长,更复杂的答案是:

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top