gpt4 book ai didi

sql-server - SQL Server 中表的 sp_tableoption 行内行为

转载 作者:行者123 更新时间:2023-12-04 02:08:44 28 4
gpt4 key购买 nike

有这个 SQL command sp_tableoption用于:

Sets option values for user-defined tables. sp_tableoption can be used to control the in-row behavior of tables with varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, or large user-defined type columns.

什么是行内行为?

最佳答案

感谢@Prdp 我做了一些研究

TL;DR; 如果您有一个包含大(长文本列)的表并且您没有一直使用 select *,您最好设置 text in row 到一些不太大的值。

exec sp_tableoption N'MyTable', 'text in row', '260'

在 SQL 中数据被保存 in pages默认 8Kb,每页更多记录 - 查找速度更快(260 允许每页 31 条记录,不到 5 倍 (log2(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

如果当行大小达到此字节阈值时此设置有值,它将被移动并改为放置指针 - 这反过来会增加每页的记录数 = 使查找速度更快...

检查设置为运行以下查询的内容:

select name, text_in_row_limit from
sys.tables

希望这能为您节省一些时间。

关于sql-server - SQL Server 中表的 sp_tableoption 行内行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40997935/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com