有这个SQL command sp_tableoption
用来:sp_tableoption行内行为
设置选项值用户定义的表。可以使用sp_tableoption来控制具有varchar(max),nvarchar(max),varbinary(max),xml,text,ntext,image或大型用户定义类型列的表的行内行为。
什么是排内行为?
有这个SQL command sp_tableoption
用来:sp_tableoption行内行为
设置选项值用户定义的表。可以使用sp_tableoption来控制具有varchar(max),nvarchar(max),varbinary(max),xml,text,ntext,image或大型用户定义类型列的表的行内行为。
什么是排内行为?
感谢@Prdp我做了一些研究
TL; DR;如果你有一个大的表(长文本列),并且你一直没有使用select *
,那么你最好将text in row
设置为一些不大的值。
exec sp_tableoption N'MyTable', 'text in row', '260'
在SQL数据被保存in pages默认的8Kb,每页拥有更多记录 - 更快的查找会(260将使31条记录每页这是不到5倍(LOG 2(31)=〜4.95)) 。
旁注:下面的SQL将让你行的表的平均长度:
declare @table nvarchar(128)
declare @sql nvarchar(max)
set @table = '[Schema].Table'
set @sql = 'select AVG((0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from sys.columns where object_id = object_id(@table)
set @sql = @sql + ')) from ' + @table
PRINT @sql -- in case you will fail to set table variable properly ;)
exec sp_executesql @SQL
What in-row means是实际的潜在长记录将在页面中保持与其他行的期望,当它看起来像select *
它会尽可能快......所以在你做任何事情的情况下,你应该把这个设置设置为大数字〜7k
如果这个设置有值时,行大小达到这个三字节shold它将被移动和指针将放在代替 - 这反过来将增加每页记录数=使查找更快...
要检查什么是它设置为运行以下查询:
select name, text_in_row_limit from
sys.tables
希望这可以为您节省一些时间。
https://technet.microsoft.com/zh-cn/library/ms189087(v=sql.105).aspx –