HelloWorld1 Asked: 2023-12-11 04:16:30 +0800 CST2023-12-11 04:16:30 +0800 CST 2023-12-11 04:16:30 +0800 CST 使用语法代码“持久”的好处 772 当我读到“坚持”时,我仍然不明白它。 在sql server中的特定表中使用SQL代码“持久化”有什么好处。 当我使用sql代码“persisted”时我会得到什么值? 谢谢你! sql-server 2 个回答 Voted Martin Smith 2023-12-11T09:20:08+08:002023-12-11T09:20:08+08:00 当我使用sql代码时我会得到什么值persisted? PERSISTED定义预先计算的列值是否存储在数据页中。 如果您对计算列建立索引,则计算列值将始终存储在预先计算的值中,无论您是否将其定义为“持久” 在某些情况下,系统会强制您这样做 用作分区表的分区列的计算列必须显式标记PERSISTED(来源) 或者,如果想要索引确定性但不精确的计算列(例如浮点计算的结果)或 CLR 表达式的结果(源) 或者如果想在检查约束、外键或Not NULL(来源)中引用它 在这种情况之外,您可以决定是否考虑将这些信息存储在数据页中而导致的更宽行的额外成本会超过潜在的成本* 预先计算该值的好处,因此无需随时重新计算SELECT。 *即使标记为,PERSISTED也不能保证表达式不会在运行时重新计算。如果您遇到这种情况,跟踪标志 176 可以提供帮助。 Best Answer J.D. 2023-12-11T04:53:28+08:002023-12-11T04:53:28+08:00 Persisted 是在表中定义计算列时可以指定的选项。计算列是表中的一列,由 T-SQL 表达式定义以计算其值。此类表达式可以包含对其他列的引用和/或利用系统或用户定义的标量函数。或者更简单地来自文档: 计算列是虚拟列,除非该列被标记为 PERSISTED,否则不会物理存储在表中。计算列表达式可以使用其他列中的数据来计算其所属列的值。 如果不使用PERSISTED关键字,则每次引用和读取该列时都会计算表达式。当表的用例写入量多于读取量时,这可能会很有用。 使用PERSISTED关键字会导致在写入表时计算表达式,并将其保存到磁盘(持久化),就像它是常规列一样。这意味着从计算列读取的所有后续引用都不需要计算表达式,因为其结果已保存在磁盘上。当表的用例读取较多而不是写入较多时,这通常更有利。 这个StackOverflow 答案提供了有关使用或不使用关键字时的差异的更多详细信息PERSISTED: 计算出的值将保留到表中,就像普通的列值一样。 如果没有,则每次访问该列时PERSISTED都会计算该值。
PERSISTED
定义预先计算的列值是否存储在数据页中。如果您对计算列建立索引,则计算列值将始终存储在预先计算的值中,无论您是否将其定义为“持久”
在某些情况下,系统会强制您这样做
PERSISTED
(来源)Not NULL
(来源)中引用它在这种情况之外,您可以决定是否考虑将这些信息存储在数据页中而导致的更宽行的额外成本会超过潜在的成本* 预先计算该值的好处,因此无需随时重新计算
SELECT
。*即使标记为,
PERSISTED
也不能保证表达式不会在运行时重新计算。如果您遇到这种情况,跟踪标志 176 可以提供帮助。Persisted 是在表中定义计算列时可以指定的选项。计算列是表中的一列,由 T-SQL 表达式定义以计算其值。此类表达式可以包含对其他列的引用和/或利用系统或用户定义的标量函数。或者更简单地来自文档:
如果不使用
PERSISTED
关键字,则每次引用和读取该列时都会计算表达式。当表的用例写入量多于读取量时,这可能会很有用。使用
PERSISTED
关键字会导致在写入表时计算表达式,并将其保存到磁盘(持久化),就像它是常规列一样。这意味着从计算列读取的所有后续引用都不需要计算表达式,因为其结果已保存在磁盘上。当表的用例读取较多而不是写入较多时,这通常更有利。这个StackOverflow 答案提供了有关使用或不使用关键字时的差异的更多详细信息
PERSISTED
: