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