为了账号安全,请及时绑定邮箱和手机立即绑定

在SQL Server上使用varchar(MAX)vs TEXT

在SQL Server上使用varchar(MAX)vs TEXT

开满天机 2019-11-23 12:54:04
我刚刚读到,该VARCHAR(MAX)数据类型(可以存储将近2GB的char数据)是TEXTSQL Server 2005和Next SQL SERVER版本中推荐的数据类型的替代。如果我想在列内搜索任何字符串,哪个操作更快?LIKE对VARCHAR(MAX)列使用子句?WHERE COL1 LIKE '%search string%'使用该TEXT列并在此列上放置全文索引 / 目录,然后使用该CONTAINS子句进行搜索?WHERE CONTAINS (Col1, 'MyToken')
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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

在两种数据类型之间使用LIKE语句是相同的。附加的功能VARCHAR(MAX)给你的是,它也可以被用来=GROUP BY其他任何VARCHAR列都可以。但是,如果您确实有很多数据,那么使用这些方法会遇到巨大的性能问题。

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

如果要搜索大量文本,而性能是关键,则应使用全文索引

LIKE 它易于实现,并且通常适用于少量数据,但是由于无法使用索引,因此在处理大数据时性能极差。


查看完整回答
反对 回复 2019-11-23
?
不负相思意

TA贡献1777条经验 获得超10个赞

如果不将文本字段从文本转换为varchar,则无法搜索文本字段。


declare @table table (a text)

insert into @table values ('a')

insert into @table values ('a')

insert into @table values ('b')

insert into @table values ('c')

insert into @table values ('d')



select *

from @table

where a ='a'

这给出一个错误:


The data types text and varchar are incompatible in the equal to operator.

Wheras这不:


declare @table table (a varchar(max))

有趣的是,LIKE仍然有效,即


where a like '%a%'


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 1547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信