sql-server - 在 SQL Server 上使用 varchar(MAX) 与 TEXT

标签 sql-server performance text varchar sql-types

我刚刚读到,VARCHAR(MAX) 数据类型(可以存储接近 2GB 的 char 数据)是 SQL Server 2005 中推荐的 TEXT 数据类型替代品和下一个 SQL SERVER 版本。

如果我想在列中搜索任何字符串,哪种操作更快?

  1. VARCHAR(MAX) 列使用 LIKE 子句?

    WHERE COL1 LIKE '%搜索字符串%'

  2. 使用TEXT列并在此列上放置全文索引/目录,然后使用搜索>CONTAINS 子句?

    WHERE CONTAINS (Col1, 'MyToken')

最佳答案

VARCHAR(MAX) 类型是 TEXT 的替代品。基本区别在于,TEXT 类型始终将数据存储在 blob 中,而 VARCHAR(MAX) 类型将尝试将数据直接存储在行中,除非超过8k 限制,此时它将其存储在一个 blob 中。

两种数据类型之间 LIKE 语句的使用是相同的。 VARCHAR(MAX) 为您提供的附加功能是,它还可以像任何其他 VARCHAR 一样与 =GROUP BY 一起使用栏即可。但是,如果您确实有大量数据,那么使用这些方法将会遇到巨大的性能问题。

关于是否应该使用LIKE进行搜索,或者是否应该使用全文索引CONTAINS。无论 VARCHAR(MAX) 还是 TEXT,这个问题都是一样的。

如果您要搜索大量文本并且性能至关重要,那么您应该使用全文索引

LIKE实现起来比较简单,通常适用于少量数据,但由于无法使用索引,因此在处理大数据时性能极差。

关于sql-server - 在 SQL Server 上使用 varchar(MAX) 与 TEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834788/

相关文章:

SQL Server Formatmessage 函数无法使用过程中的变量

performance - 为什么搜索词的微小变化会大大减慢查询速度?

performance - 在 zsh 中的每个命令之后自动执行内置时间(如 tcsh 中的 `set time`)

html - 如何将段落与文本字段对齐

sql-server - MSSql 查询问题

c# - 当我在 SQL Server 上插入 ~81192 个字符时,nvarchar(max) 字段为空

c - 如何使以下双线性插值代码更高效?

text - 退格字符怪异

javascript - jQuery animate 在 Canvas 上移动文本

sql - 过程需要类型为 '@params' 的参数 'ntext/nchar/nvarchar'