在 SQL 数据库中使用 TEXT 是否比使用 varchar 效率低?
如果是,为什么?
如果不是,为什么你不总是使用 TEXT?
我在这里没有针对特定的数据库,但 oracle 可能是最相关的,尽管我暂时在 MySQL 上进行测试作为概念证明的一部分。
在 SQL 数据库中使用 TEXT 是否比使用 varchar 效率低?
如果是,为什么?
如果不是,为什么你不总是使用 TEXT?
我在这里没有针对特定的数据库,但 oracle 可能是最相关的,尽管我暂时在 MySQL 上进行测试作为概念证明的一部分。
从微软这里
在 Microsoft SQL Server 的未来版本中,将删除 ntext、text 和 image 数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
当您使用varchar(max)
over text 时,您可以在WHERE
子句中使用它,因为它们与较小的对应物相同,varchar,nvarchar and varbinary
. 下面是应该使用什么而不是应该使用什么的小列表:
提示:这三种类型之间没有性能差异,除了在使用空白填充类型时增加了存储大小,以及在存储到长度受限的列时需要几个额外的周期来检查长度。虽然 character(n) 在其他一些数据库系统中具有性能优势,但在 PostgreSQL 中没有这样的优势。在大多数情况下,应改为使用文本或字符变化。
简短的回答是:是的,它们的效率较低。
更长,更复杂的答案是:
是的,它们可能效率较低。这取决于您使用的 DBMS 以及表的大小等。TEXT 字段是可变宽度的,因此 DBMS 在尝试查找记录时必须做更多的工作。这对性能的影响程度与 DBMS 的总体效率、它存储的有关表行的数据量以及它是否优化固定长度的表成正比。
我知道 MySQL 在固定长度的表行上工作得更快,但你必须告诉它该表可以首先被视为固定长度的表。我真的没有任何与其他 DBMS 相关的实际经验来关联实际数字。但是在有很多(读取一百万或更多)记录的表上,它可以产生显着的差异。不过,较小的桌子几乎没有实际差异。
您需要具体说明您正在谈论的数据库。我相信至少在某些数据库中,TEXT 存储为与表本身分开的 CLOB(仅包含一个引用)。这会导致表更小(好),但在获取时会进行额外的查找,并且可能会缓存未命中(坏)。
可能也有索引和查询的含义,但同样取决于您使用的特定 RDBMS。