2016-12-06 44 views
1

有這個SQL command sp_tableoption用來:sp_tableoption行內行爲

設置選項值用戶定義的表。可以使用sp_tableoption來控制具有varchar(max),nvarchar(max),varbinary(max),xml,text,ntext,image或大型用戶定義類型列的表的行內行爲。

什麼是排內行爲?

+2

https://technet.microsoft.com/zh-cn/library/ms189087(v=sql.105).aspx –

回答

1

感謝@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 

希望這可以爲您節省一些時間。