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