有這個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 –