数据库:“TEXT”字段的效率是否比“varchar”低?
-
03-07-2019 - |
题
在 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) 代替图像
其他提示
提示:这三种类型之间没有性能差异,除了使用空白填充类型时增加的存储大小,以及一些额外的周期来检查存储到长度受限列中的长度。虽然character(n)在其他一些数据库系统中具有性能优势,但它在PostgreSQL中没有这样的优势。在大多数情况下,应该使用文本或字符变化。
简短的回答是:是的,效率较低。
更长,更复杂的答案是:
是的,它们可能效率较低。这取决于您使用的DBMS和表的大小等等.TEXT字段是可变宽度的,因此DBMS在尝试查找记录时必须做更多的工作。这对您的性能的影响程度与您的DBMS的一般效率,它存储的表行数量以及是否优化固定长度表成正比。
我知道MySQL使用固定长度的表行可以更快地工作,但你必须告诉它,该表能够首先被视为一个固定长度的表。我对其他DBMS没有任何实际经验可以将实际数字联系起来。但是对于有大量(读取一百万或更多)记录的表格,它可以产生显着的差异。较小的表虽然没有实际的差别。
您需要具体说明您正在谈论的数据库。我相信至少有一些数据库,TEXT存储为一个独立于表本身的CLOB(它只包含一个引用)。这导致表格更小(更好)但是额外查找并且在获取时可能是缓存未命中(错误)。
也可能存在索引和查询含义,但它又取决于您正在使用的特定RDBMS。